XmlSerializer序列化类内容

时间:2013-01-23 08:47:39

标签: c# xml-serialization xmlserializer

我有两个课程,我们称之为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 /互联网,但我似乎无法获得正确的措辞以找到有意义的结果,所以如果之前有人问过,请对不起。

有没有办法让XmlSerializer不写这个类的根标签,但是还是要编写它的成员?最好不要重新组织课程,但如果没有别的办法,我也会这样做。

3 个答案:

答案 0 :(得分:1)

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

请注意,如果不是不可能在以后再次正确反序列化,那么您将以这种方式序列化的任何内容都会很难。

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