【问题标题】:VB.NET - XMLSerialization - Adding Type attribute of 'Array' to root node of ArrayVB.NET - XMLSerialization - 将“数组”的类型属性添加到数组的根节点
【发布时间】:2017-05-16 13:13:58
【问题描述】:

我对类进行了以下设置,以使用 vb.net 使用序列化创建一些 XML。

Public Class USER
    Public Property USERCODE As String
    Public Property COMPANYCODE As String
    Public Property LEDGERCODE As String
    Public Property WORKGROUP As String
    Public Property SYSTEMDATE As Date
End Class

Public Class JOB
    Private myItems() As Object
    Public Property USER As New SchedulerParameters.USER
    Public Property [OBJECT] As String
    Public Property METHOD As String

    <XmlArrayItem(ElementName:="PARAMETER"), XmlArray()>
    Public Property PARAMETERS As Object()
        Get

            Return myItems
        End Get
        Set
            myItems = Value
        End Set
    End Property
End Class

创建

<JOB xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">    
<USER>      
    <USERCODE>RW</USERCODE>      
    <COMPANYCODE>DEM</COMPANYCODE>      
    <LEDGERCODE>PL1</LEDGERCODE>      
    <WORKGROUP>DIRECTOR</WORKGROUP>      
    <SYSTEMDATE>0001-01-01T00:00:00</SYSTEMDATE>    
</USER>    
<OBJECT>QLHSGPostingRoutines.HPM.OrderStatusChange</OBJECT>    
<METHOD>Issue</METHOD>    
<PARAMETERS>
    <PARAMETER xsi:type="xsd:string">66827</PARAMETER>
    <PARAMETER xsi:type="xsd:string">NULL</PARAMETER>
</PARAMETERS>
</JOB>

我想在 PARAMETERS 上有这个属性:

<PARAMETERS type="Array">

为了打电话,我使用:

    .....
    _xml.PARAMETERS = _paramArray

    Dim xs As New XmlSerializer(_xml.GetType)

    xs.Serialize(_s, _xml)

    Return _s.ToString

我希望使用,但由于某种原因这不起作用。

如果有人可以帮助我,那就太好了。

谢谢。

【问题讨论】:

    标签: xml vb.net serialization


    【解决方案1】:

    为了做你想做的事,你不能使用这样的简单数组,你必须为它创建某种对象/POCO。

    Public Class JOB
        Public Property USER As New SchedulerParameters.USER
        Public Property [OBJECT] As String
        Public Property METHOD As String
    
        Public Property PARAMETERS As PARAMETERS
    End Class
    
    Public Class PARAMETERS
        <XmlAttribute("type")>
        Public Property Type As String = "Array"
    
        <XmlElement("PARAMETER")>
        Public Property Items As Object()
    End Class
    

    通过创建一个类,然后在字符串上指定XmlElement("PARAMETER")XmlAttribute("type"),就会生成你想要的XML:

      <PARAMETERS type="Array">
        <PARAMETER xsi:type="xsd:string">66827</PARAMETER>
        <PARAMETER xsi:type="xsd:string">NULL</PARAMETER>
      </PARAMETERS>
    

    我不确定为什么您需要这种格式,如果您使用 .NET 对其进行序列化和反序列化,那么您不需要需要额外的type属性。

    【讨论】:

    • 在添加新功能的同时维护旧系统的老故事。谢谢,我马上试一试,然后告诉你进展如何。
    • 作为后续 - 我在这里,如何从参数节点中删除 xsi:type="xsd:string"?
    • @RhysWilliams 唯一的简单方法是将Items属性从Object()更改为String()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2017-04-25
    • 2018-07-12
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多