【问题标题】:Using .NET XmlSerializer for xml with different polymorphic roots对具有不同多态根的 xml 使用 .NET XmlSerializer
【发布时间】:2011-05-01 00:32:06
【问题描述】:

我有一个来源不同的 XML 文档。我有一个 XSD 模式,就像 this question 中描述的那样,具有 Base 类型的 abstract='true' 根元素 'BaseElem',以及扩展 Base 类型并使用替代 Group= 的附加根元素 Elem1、Elem2、... '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);

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

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

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

我怎样才能有一个更多态的单一序列化方法?

谢谢!

【问题讨论】:

    标签: .net xsd xmlserializer xsd.exe


    【解决方案1】:

    如果我理解正确...您可以使用更多通用方法吗? (仅显示反序列化 sn-p...)

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

    【讨论】:

    • 我很抱歉没有完全理解...您的派生类使用不同的 xml 根节点名称,您是否喜欢它们与基类相同?
    • 是的,基本上我希望有一个架构可以为我可以从服务中获得的所有不同的 xml 生成一个假的“父”根。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多