我有来自一个来源的不同来源的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);
如何使用更多态的单一序列化方法?
谢谢!
答案 0 :(得分:1)
如果我理解正确的话......你能使用更多的通用方法吗? (仅显示反序列化片段...)
public static T DeserializeObject<T>(object obj)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
//etc
return (T)xs.Deserialize(obj);
}