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

How can I set tag names when I serialize object 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; }
}

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

[XmlElement] 用于 XmlSerializer。对于 DataContractSerializer,您想查看 [DataContract](针对类型)和 [DataMember](针对属性)。您可以在 DataMemberAttribute.

上设置名称

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

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

[DataMember(Name="YourName")]