XmlSerializer 序列化类内容

本文关键字:序列化 XmlSerializer | 更新日期: 2023-09-27 17:55:12

我有两个类,我们称它们为AB

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 序列化类内容

XmlSerializer不是那么灵活 - 你可以告诉它忽略一个属性,但它完全忽略它。

请注意,以这种方式序列化的任何内容都很难(如果不是不可能的话)以后再次正确反序列化。

你为什么不把foobar作为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;
}

虽然这不是你要找的,但它可能更可取,因为它允许您为元素提供更好的名称