在将对象序列化为XML时,如何设置标记名称?

时间:2017-11-20 09:20:33

标签: c# xml serialization linq-to-xml

我尝试这样做,但最终XML文档中的标记与属性的名称相似,但不是我的自定义名称。

XDocument doc = new XDocument();
using (var writer = doc.CreateWriter())
{
    // write xml into the writer
    var serializer = new DataContractSerializer(myClassObject.GetType());

    serializer.WriteObject(writer, sitemap);
}


[DataContract]
[XmlRoot(ElementName = "customRootTag")]
public class MyClass
{
    [DataMember]
    [XmlArray(ElementName = "customTag")]
    [XmlArrayItem(ElementName = "customItemTag")]
    public MyClassItem[] Items { get; set; }

    public MyClass(List<MyClassItem> items)
    {
        Items = items.ToArray();
    }
}

public class MyClassItem
{
    [XmlElement(ElementName = "urlTag")]
    public string Url { get; set; }
    [XmlElement(ElementName = "dateTag")]
    public DateTime Date { get; set; }
}

当我将类对象序列化为XML时,如何设置自己的自定义标记名称而不是属性名称?

2 个答案:

答案 0 :(得分:0)

[XmlElement]适用于XmlSerializer。对于DataContractSerializer,您希望查看[DataContract](针对类型)和[DataMember](针对属性)。您可以在DataMemberAttribute上设置名称。

然而! DataContractSerializer在某些方面不太灵活而不是XmlSerializer。如果您关心xml布局,我建议XmlSerializer。对于其他一些事情(例如,对象跟踪),DataContractSerializer会更好。优点和缺点。

答案 1 :(得分:0)

由于您使用的是DataContractSerializer,请在DataMember属性上设置标记名称:

[DataMember(Name="YourName")]