我有两个课程,我们称之为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 /互联网,但我似乎无法获得正确的措辞以找到有意义的结果,所以如果之前有人问过,请对不起。
有没有办法让XmlSerializer
不写这个类的根标签,但是还是要编写它的成员?最好不要重新组织课程,但如果没有别的办法,我也会这样做。
答案 0 :(得分:1)
XmlSerializer
并不灵活 - 你可以告诉它忽略一个属性,但它会完全忽略它。
请注意,如果不是不可能在以后再次正确反序列化,那么您将以这种方式序列化的任何内容都会很难。
为什么不把foo
和bar
作为B
的属性呢?
答案 1 :(得分:0)
怎么样:
public class A
{
public int foo;
public int bar;
}
public class B
{
[XmlElement(ElementName = "ABetterName")]
public A Inner;
}
虽然这不是你想要的,但它可能更好,因为它允许你给元素提供更好的名称
答案 2 :(得分:0)
您可以使用XDocument并自行构建XML 类似的东西:
XDocument doc = new XDocument(
new XElement("B",
new XElement("foo", a.foo),
new XElement("bar", a.bar)
)
);