0

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

public class A
{
    public int foo;
    public int bar;
}

public class B
{
    public class A;
}

现在,当我序列化对象时BXmlSerializer它正在做你期望它做的事情:

<?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不写类的根标签而是写它的成员吗?最好不要重新组织课程,但如果没有其他办法,我也会这样做。

4

3 回答 3

1

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

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

你为什么不直接把fooandbar作为属性B呢?

于 2013-01-23T08:50:00.143 回答
0

关于什么:

public class A
{
    public int foo;
    public int bar;
}

public class B
{
    [XmlElement(ElementName = "ABetterName")]
    public A Inner;
}

尽管这不是您要查找的内容,但它可能更可取,因为它可以让您为元素提供更好的名称

于 2013-01-23T09:08:34.773 回答
0

您可以使用XDocument并自己构建 XML。
就像是:

XDocument doc = new XDocument(
    new XElement("B",
        new XElement("foo", a.foo),
        new XElement("bar", a.bar)
    )
);
于 2013-01-23T09:18:08.743 回答