XmlSerializer 序列化类内容
本文关键字:序列化 XmlSerializer | 更新日期: 2023-09-27 17:55:12
我有两个类,我们称它们为A
和B
:
public class A
{
public int foo;
public int bar;
}
public class B
{
public class A;
}
现在,当我序列化对象B
时,XmlSerializer
正在执行您希望它执行的操作:
<?xml version="1.0" encoding="utf-8"?>
<B>
<A>
<foo>0</foo>
<bar>0</bar>
</A>
</B>
但是我需要XmlSerializer
来序列化类A
的内容,但忽略根<A>
标签,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<B>
<foo>0</foo>
<bar>0</bar>
</B>
我知道我可以把A
的成员放进B
但这些都是大班,我希望这是最后的手段。我试图搜索MSDN/Google/Internet,但我似乎无法找到正确的措辞来找到有意义的结果,如果之前有人问过,很抱歉。
有没有办法让XmlSerializer
不写类的根标签,而是写它的成员? 最好不要重新组织班级,但如果没有其他办法,我也会这样做。
XmlSerializer
不是那么灵活 - 你可以告诉它忽略一个属性,但它完全忽略它。
请注意,以这种方式序列化的任何内容都很难(如果不是不可能的话)以后再次正确反序列化。
你为什么不把foo
和bar
作为B
的属性呢?
您可以使用 XDocument 并自行构建 XML。
像这样:
XDocument doc = new XDocument(
new XElement("B",
new XElement("foo", a.foo),
new XElement("bar", a.bar)
)
);
怎么样:
public class A
{
public int foo;
public int bar;
}
public class B
{
[XmlElement(ElementName = "ABetterName")]
public A Inner;
}
虽然这不是你要找的,但它可能更可取,因为它允许您为元素提供更好的名称