如何构造类以在同一XML节点中输出属性和简单字符串

时间:2018-04-10 18:53:44

标签: xml vb.net xmlserializer

鉴于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始终为空。我能够在线找到的所有示例在<Status>节点中都没有字符串值,总有子节点构成等同于<Status>节点的内容。

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

1 个答案:

答案 0 :(得分: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属性中的输出名称对它们进行装饰。