0

私には2つのクラスがあり、それらAを呼び出してみましょうB

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 /インターネットを検索しようとしましたが、意味のある結果を見つけるための言葉遣いが正しくないようです。以前に質問された場合は申し訳ありません。

XmlSerializerクラスのルートタグを書き込まずに、とにかくそのメンバーを書き込むようにする方法はありますか?できればクラスを再編成せずに、しかし他に方法がなければ、私もそうします。

4

3 に答える 3

1

これXmlSerializerはそれほど柔軟ではありません。プロパティを無視するように指示できますが、完全に無視されます。

念のために言っておきますが、この方法でシリアル化するものは、後で正しく逆シリアル化することが不可能ではないにしても難しいでしょう。

代わりにfoobarをプロパティとして入れてみませんか?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 に答える