序列化没有类型标记的类型

时间:2013-10-14 10:40:38

标签: c# xml-serialization

有没有可能我序列化一个对象而不需要添加它的实际root-tag。这听起来有点好奇,所以我附上一些代码来解释我的意思:

class Test {
    public MyClass M;
}

class MyClass {
    public int A;
    public int B;
}

成员A和B现在不应该序列化为M,而是序列化为根类Test,如下所示:

<Test>
  <A>3</A>
  <B>4</B>
</Test>

我需要这个,因为我有很多空的虚拟类,它们只是从一个基类派生出来但是根本不添加成员,我想避免那个内部虚拟类型的序列化。这可能吗?

2 个答案:

答案 0 :(得分:0)

我认为用 XmlSerializer 类做这件事是不可能的。但您始终可以使用 XmlReader XmlWriter 手动序列化和反序列化数据。

答案 1 :(得分:0)

默认情况下,

XmlSerializer不支持此行为。该类可以实现IXmlSerializable或从XDocument创建文档。

请参阅:XML serialization of a nested object, but at the root level

public string Serialize(Test test)
{
    var document =
        new XDocument(
            new XElement("Test",
                new XElement("A", test.M.A),
                new XElement("B", test.M.B)));

    return document.ToString();
}

var test = new Test {  M = new MyClass { A = 1, B = 2 } };

Console.WriteLine(Serialize(test));

输出:

<Test>
  <A>1</A>
  <B>2</B>
</Test>