序列化类型而不带其类型标记

本文关键字:类型 序列化 | 更新日期: 2023-09-27 18:35:11

是否有可能在不需要添加其实际根标记的情况下序列化对象。这听起来有点奇怪,所以我附加了一些代码来解释我的意思:

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

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

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

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

序列化类型而不带其类型标记

默认情况下

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>
我认为使用

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