序列化类型而不带其类型标记
本文关键字:类型 序列化 | 更新日期: 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 类不可能做到这一点。但是,您始终可以使用 XmlReader 和 XmlWriter 手动序列化和反序列化数据。