0

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

class Test {
    public MyClass M;
}

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

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

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

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

4

2 回答 2

0

我认为使用XmlSerializer类是不可能做到这一点的。但是您始终可以使用XmlReaderXmlWriter手动序列化和反序列化数据。

于 2013-10-14T10:57:15.650 回答
0

XmlSerializer默认情况下不支持此行为。该类可以实现IXmlSerializable或从XDocument.

请参阅:嵌套对象的 XML 序列化,但在根级别

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>
于 2013-10-14T11:21:26.670 回答