.net - 如何控制复杂对象的反序列化

标签 .net xml vb.net serialization

我调用了一个返回大量 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/

相关文章:

c# - 对象字典返回不正确的值

c# - 是否可以直接打开Outlook session 窗口?

sql-server - 根据条件消除 XML 中的行

xml - VB.NET 循环遍历 XML 结果

ExcelDataReader 更改列名称

c# - XML 架构 (XSD) 到实体对象模型

.net - .NET 中具有超过 2^31 个键的大数组的选项

xml - 打开文件对话框以选择 XML 文件

xml - 使用 xslt 在现有 xml 文件中创建新元素

vb.net - 无法使用 VS 2019 在 VB.Net 项目中创建新的命名空间