我调用了一个返回大量 XML 数据(大约 2mb)的第三方 Web 服务,我想以比正常情况更可控的方式将其反序列化为一个对象。这是 xml:
<vehicle>
<vehicleManufacturer>
<type>1</type>
<name>A Make</name>
</vehicleManufacturer>
...
我知道我可以执行以下代码来控制将哪些元素序列化为哪些属性,在本例中,Car Make 对象包含两个属性,类型和名称。
<System.Xml.Serialization.XmlElement("vehicleManufacturer")> _
Public Property Make() As CarMake
但如果可能的话,我想做的是仅将名称字段反序列化到 Make 属性中,或者甚至只是将整个元素及其内容序列化为文本。
<System.Xml.Serialization.XmlElement("vehicleManufacturer")> _
Public Property Make() As String
这是一个非常简化的示例,所以如果有任何资源可以帮助我解决这个问题,那就太好了。
另一个例子:
<vehicle>
<warrantyDetail>
<warrantyBasicInformation buildStartdate="09/07/2013" warrantyStartDate="31/07/2013"/>
</warrantyDetail>
</vehicle>
我想从 warrantyBasicInformation 中获取属性,而不必构建保修详细信息和 warrantyBasicInformation 对象。
请注意,这类事情通常会从 WSDL 生成,但是,我不会得到这样的东西,我没有 XSD,而且 trying to generate一个失败了。我也知道我可以实现 ISerializable 并使用 xml 阅读器或 linq,但同样,这会变成大量代码并且可能难以维护。
最佳答案
几周前我遇到过类似的情况,您尝试使用的 Microsoft 的 xsd.exe 无法生成合理的 XML 模式。我使用 trang 解决了这个问题,它完美地完成了工作。然后我使用 xsd.exe 自动生成包装类。
这可能无法完全回答您的问题,但使用 xsd 模式会让您的生活更轻松。
关于.net - 如何控制复杂对象的反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549358/