C# XmlSerializer序列化类内容
我有两个班,我们把它们叫做C# XmlSerializer序列化类内容,c#,xml-serialization,xmlserializer,C#,Xml Serialization,Xmlserializer,我有两个班,我们把它们叫做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&l
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>
我知道我可以把A
的成员放到B
中,但这些都是大班,我希望这是最后的选择。我曾尝试搜索MSDN/谷歌/互联网,但我似乎无法找到正确的措辞来找到有意义的结果,如果以前有人问过这一问题,我感到非常抱歉
有没有办法让
XmlSerializer
不写类的根标记,而是写它的成员?最好不重新组织类,但如果没有其他方法,我也会这样做。XmlSerializer没有那么灵活--您可以告诉它忽略属性,但它会完全忽略它
请注意,任何以这种方式序列化的内容都很难在以后正确地反序列化
为什么不把foo
和bar
作为B
的属性呢?那么:
public class A
{
public int foo;
public int bar;
}
public class B
{
[XmlElement(ElementName = "ABetterName")]
public A Inner;
}
尽管这不是您想要的,但它可能更可取,因为它允许您为元素提供更好的名称您可以自己使用和构建XML。比如:
XDocument doc = new XDocument(
new XElement("B",
new XElement("foo", a.foo),
new XElement("bar", a.bar)
)
);
是的,我知道以后反序列化它的问题,但是代码只需要生成一些XML并忘记它,所以反序列化不是一个真正的问题。好的观点。至于我为什么不把
foo
和bar
放在B
中。这是因为A
是一个大类,多个类都使用它,所以这样做会造成更大的混乱DIf如果您以后不打算对其进行反序列化,那么使用XDocument
构建对象,然后保存该对象怎么样。那行吗?行得通,我不知道为什么我忘了XDocument
。。。我会调查一下的,我为此写了一封信。如果你需要更多的信息,请告诉我
XDocument doc = new XDocument(
new XElement("B",
new XElement("foo", a.foo),
new XElement("bar", a.bar)
)
);