C#学习教程:使用XmlSerializer反序列化随机/未知类型这不是常规的SOAP服务,它有自己的XML对象类型。例如,我可能会请求对象,但它可能会返回。因此,换句话说,我必须处理随机的XML文档类型。但是,我知道我必须处理哪些类型。我想做的是找到一种通用的方法来序列化/反序列化这些文档。问题是XmlSerializer在创建阶段需要知道类型。这些未封装在公共根元素中,因此创建基类和使用[XmlInclude]属性在这种情况下不起作用:[XmlInclude(typeof(Exception))][XmlInclude(typeof(Capabilities))]publicabstractclass}[XmlAttribute("schemaLocation")]publicStringSchemaLocation{get;放;}}[XmlRoot("Exception")]publicclassException:BaseClass{publicException():base(){}[XmlElement]publicStringMessage{set;得到;}}[XmlRoot("Capabilities")]publicclassCapabilities:BaseClass{publicCapabilities():base(){}[XmlElement]publicStringServiceName{set;得到;到目前为止,我的解决方案是使用XmlReader手动探测根元素,然后在创建XmlSerializer实例之前将其映射到正确的类型。有没有更好的办法?我不知道它是否更好,但您可以尝试DynamicObject方法。http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with-dynamicobject.aspx正如你所说,当你请求服务时可能会回来。所以你知道如果请求一个类型,那么服务可能只返回某些类型?我最初尝试使用XmlSerializerconstructor(Type,Type[])...来初始化XmlSerializer类的一个新实例,它可以将指定类型的对象序列化为XML文档,也可以将XML文档反序列化为指定类型的对象。如果属性或字段返回数组,则extraTypes参数指定可以插入到数组中的对象。以上就是C#学习教程:使用XmlSerializer反序列化所有随机/未知类型共享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
