1

XmlInclude のようなものを使用して型を事前に定義するなど、一連の体操を必要としない、XML シリアライゼーションおよびデシリアライゼーションの汎用メソッドを構築する方法はありますか? ビルドする必要があるコードは、事前定義された型に依存できません。ここでリフレクションを使用できると想定していますが、適切な解決策が見つかりません。NuGet から試したものにはそれぞれ制限があります。

  • Polenter は、逆シリアル化できない使用できない出力を生成するようです
  • グローバル、Netfx では事前に型定義が必要
  • Bender は美しいですが、シリアル化されているオブジェクト内に埋め込まれたオブジェクトをサポートしていないようです
  • XSerializer と JsonFX はシリアル化側で必要なものですが、出力は逆シリアル化されません

標準の XmlSerializer は、明らかな理由 (定義済みの型、XmlInclude など) で機能しません。

シリアル化してから逆シリアル化する必要があるものの簡単な例:

    public class c1
    {
        public string name { get; set; }
        public object obj { get; set; }
    }

    public class c2
    {
        public string city { get; set; }
    }

    public static void Main(string[] args)
    {
        c1 class_1 = new c1();
        c2 class_2 = new c2();
        class_1.name = "david";
        class_2.city = "chicago";
        class_1.obj = class_2;

        string xml = <insert here>;
        Console.WriteLine("XML: " + xml);

        c1 deserialized = new c1();
        deserialized = <insert here>;
        Console.WriteLine("City: " + ((c2)c1.obj).city);
    }

このようなものは存在しますか?

4

1 に答える 1

0

「型を定義しない」とはどういう意味かわかりません。それがコードで動作しているオブジェクトの場合、型があります。最も簡単な方法は、ISerializable に対して動作するようにコードを記述することです。そうすれば、コードがビルド時に認識していないものであっても、任意のシリアル化可能な型で動作できます。または、動的オブジェクト (実行時にメンバーが定義されるオブジェクト) を使用している場合は、この質問をチェックして、ISerializable DynamicObject を作成する例を確認してください: https://stackoverflow.com/a/7501960/518955

于 2013-09-07T18:30:35.173 に答える