使用.NET XmlSerializer for xml具有不同的多态根

时间:2010-10-26 22:19:09

标签: .net xsd xmlserializer xsd.exe

我有来自一个来源的不同来源的XML文档。我有一个XSD架构,就像在this question中描述的那样,带有一个Base类型的abstract ='true'根元素'BaseElem',以及扩展Base类型和使用的其他根元素Elem1,Elem2,... substitutionGroup ='BaseElement'属性。

xsd.exe生成BaseElem,派生的Elem1,Elem2,...类正常,只有派生类具有[XmlRootAttribute]。

我想使用内置的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);

生成元素。要使用特定的root进行序列化,我必须创建序列化程序“new XmlSerializer(typeof(Elem1))”。

如果使用BaseElem,反序列化根本不起作用,并且只能这样工作:

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

如何使用更多态的单一序列化方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话......你能使用更多的通用方法吗? (仅显示反序列化片段...)

   public static T DeserializeObject<T>(object obj)
    {
       XmlSerializer xs = new XmlSerializer(typeof(T));
       //etc
       return (T)xs.Deserialize(obj);
    }