Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlSerializer序列化类内容_C#_Xml Serialization_Xmlserializer - Fatal编程技术网

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)
    )
);