【问题标题】:Change name of root element when serializing with XDocument使用 XDocument 序列化时更改根元素的名称
【发布时间】:2019-04-14 08:03:07
【问题描述】:

我尝试在序列化为 XDocument 时更改根名称。

我尝试序列化一个(n 内部)类并获取根名称Test.MyClass
我尝试使用XmlRoot 属性更改它,但没有任何反应。更改根名称的技巧是什么?还是我将 XDocument 用于它不能做的事情?

[TestClass]
public class MyTestClass
{
    [TestMethod]
    public void TestMethod()
    {
        var res = Serialise(new MyClass());
    }

    private static XDocument Serialise(object objectToSerialize)
    {
        var doc = new XDocument();
        using (var writer = doc.CreateWriter())
        {
            var serializer = new DataContractSerializer(objectToSerialize.GetType());
            serializer.WriteObject(writer, objectToSerialize);
        }
        return doc;
    }

    [XmlRoot("NewName")]
    public class MyClass { }
}

我明白了

<MyTestClass.MyClass/>

但我想要

<NewName/>

【问题讨论】:

  • DataContractSerializer 序列化程序无法识别 XmlRoot 属性。请改用 XmlSerializer。
  • in the documentation 所述,您需要在要使用DataContractSerializer 的类上使用DataContractSerializable 属性。
  • @jdweng 您的评论可能和 Heritic Monkey 的一样好,但我选择后者作为答案。老实说:我一开始就不太喜欢我的问题——因为缺乏研究。为问题辩护:处理 Xml 的功能很复杂,很难找出做事的“正确方法”。

标签: c# xml serialization


【解决方案1】:

the documentation 中所述,您需要在要使用DataContractSerializer 的类上使用DataContractSerializable 属性。 XmlRoot 属性与XmlSerializer 一起使用,如their comment 中的@jdweng 所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多