2

1 つのソースから異なるルートを持つ XML ドキュメントがあります。この質問で説明されているのと同じような XSD スキーマがあり、base タイプの abstract='true' ルート要素 'BaseElem' と、Base タイプを拡張し、substitutionGroup=' を使用する追加のルート要素 Elem1、Elem2 などがあります。 BaseElement' 属性。

xsd.exe は、[XmlRootAttribute] を持つ派生クラスのみを使用して、BaseElem と派生 Elem1、Elem2、... クラスを生成します。

組み込みの XmlSerializer を使用して、生成されたオブジェクトをシリアル化および逆シリアル化したいと考えています。

<Elem1>...</Elem1>  <!--This is the whole document, not a frament-->

    into this object, or in reverse:

var elem1 = new Elem1();

シリアル化:

var srz = new XmlSerializer(typeof (BaseElem));
srz.Serialize(writer, elem1);

要素を生成します。特定のルートでシリアル化するには、シリアライザー「new XmlSerializer(typeof(Elem1))」を作成する必要があります。

BaseElem が使用されている場合、逆シリアル化はまったく機能せず、次のようにのみ機能します。

var srz = new XmlSerializer(typeof (Elem1));
var elem1 = (Elem1) srz.Deserialize(reader);

よりポリモーフィックな単一のシリアライザ アプローチを使用するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

私が正しく理解していれば...もっと一般的なアプローチを使用できますか? (逆シリアル化のスニペットのみを表示しています...)

   public static T DeserializeObject<T>(object obj)
    {
       XmlSerializer xs = new XmlSerializer(typeof(T));
       //etc
       return (T)xs.Deserialize(obj);
    }
于 2010-10-26T22:47:33.533 に答える