有没有可能我序列化一个对象而不需要添加它的实际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>
我需要这个,因为我有很多空的虚拟类,它们只是从一个基类派生出来但是根本不添加成员,我想避免那个内部虚拟类型的序列化。这可能吗?
答案 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>