【问题标题】:How to structure a class to output an attribute and a simple string in the same XML node如何构造一个类以在同一个 XML 节点中输出一个属性和一个简单的字符串
【发布时间】:2018-04-10 18:53:44
【问题描述】:

给定 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Response Version="3">
  <Status StatusCode="Test">Some Value</Status>
</Response>

构造 Status 类以便System.Xml.Serialization.XmlSerializer 将给定的 XML 正确解析为状态类的正确方法是什么?

我目前正在从第三方接收这种 XML 结构,他们不可能更改格式。

我对响应类的尝试如下所示:

<XmlRoot(ElementName:="Response")> Public Class clsResponse
    <XmlAttribute(AttributeName:="Version"), DefaultValue(0)> Public Property intVersion() As Integer
    <XmlElement(ElementName:="Status", Type:=GetType(clsStatus), Order:=2)> Public Property strStatus() As clsStatus
End Class

还有状态类:

<XmlRoot(ElementName:="Status")> Public Class clsStatus
    <XmlAttribute(AttributeName:="StatusCode")> Public Property strStatusCode() As String
    <XmlElement(ElementName:="Status", Order:=1)> Public Property strStatus() As String
End Class

不幸的是,这导致strStatus 始终为空白。我在网上找到的所有示例都没有&lt;Status&gt; 节点中的字符串值,总是有子节点构成与&lt;Status&gt; 节点等效的内容。

注意:我已经从 XML 和代码中删除了一堆东西,试图只包含相关的部分。如果我剪得太多,请告诉我,我会提供任何其他需要的信息。

【问题讨论】:

标签: xml vb.net xmlserializer


【解决方案1】:

您需要为 Status 元素添加另一个类,因为它包含多个成员。

Public Class Response

    <XmlAttribute> Public Version As Integer
    Public Status As Status

End Class

Public Class Status

    <XmlAttribute> Public StatusCode As String
    <XmlText> Public Text As String

End Class

您可以根据需要使用属性以及重命名成员,并使用 xml 属性中的输出名称来装饰它们。

【讨论】:

  • 谢谢。将strStatus 上的标签从XmlElement 更改为XmlText 完成了这项工作。
猜你喜欢
  • 2022-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2017-02-18
  • 2013-07-30
相关资源
最近更新 更多