0

実際のルートタグも追加する必要なく、オブジェクトをシリアル化する可​​能性はありますか? これは少し奇妙に聞こえるので、意味を説明するコードをいくつか追加します。

class Test {
    public MyClass M;
}

class MyClass {
    public int A;
    public int B;
}

メンバー A と B は、次のように M ではなくルート クラスにシリアル化する必要がTestあります。

<Test>
  <A>3</A>
  <B>4</B>
</Test>

基本クラスから単純に派生した多くの空のダミークラスがありますが、その内部ダミータイプのシリアル化を避けたい場合はメンバーをまったく追加しないため、これが必要です。これは可能ですか?

4

2 に答える 2

0

XmlSerializerクラスでこれを行うことは不可能だと思います。ただし、いつでもXmlReaderXmlWriterを使用して、データを手動でシリアル化および逆シリアル化できます。

于 2013-10-14T10:57:15.650 に答える
0

XmlSerializerデフォルトでは、この動作はサポートされていません。クラスは、 からドキュメントを実装IXmlSerializableまたは作成できますXDocument

参照:ネストされたオブジェクトの XML シリアル化、ただしルート レベルで

public string Serialize(Test test)
{
    var document =
        new XDocument(
            new XElement("Test",
                new XElement("A", test.M.A),
                new XElement("B", test.M.B)));

    return document.ToString();
}

var test = new Test {  M = new MyClass { A = 1, B = 2 } };

Console.WriteLine(Serialize(test));

出力:

<Test>
  <A>1</A>
  <B>2</B>
</Test>
于 2013-10-14T11:21:26.670 に答える