WCF数据序列化

时间:2012-05-11 15:38:07

标签: wcf xml-serialization

使用WCF如何修改此DataContract或代码:

<DataContract()>
Public Class listaActos
Private _codigoActo As List(Of String)

<DataMember(IsRequired:=True)>
Public Property codigoActo() As List(Of String)
    Get
        Return _codigoActo
    End Get

    Set(ByVal value As List(Of String))
        _codigoActo = value
    End Set
End Property   ...

在序列化时生成以下响应xml:

 <a:listaActos>
     <a:codigoActo xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <b:string>01672</b:string>
     </a:codigoActo>  </a:listaActos>

但我希望如下:

<a:listaActos>
     <a:codigoActo>01672</a:codigoActo>
     <a:codigoActo>01673</a:codigoActo>
     <a:codigoActo>01674</a:codigoActo></a:listaActos>

提前致谢!!

1 个答案:

答案 0 :(得分:1)

如果您的班级listaActos中只包含codigoActo列表,那么您可以将其设置为集合类型(例如,将其从List(Of String)继承)。这将通过DataContractSerializer为您提供所需的XML形状。

如果它有更多成员,那么您需要使用XmlSerializer,并定义该类。

下面的代码显示了列表选项。

Public Class StackOverflow_10554490
    <CollectionDataContract(Name:="listaActos", Namespace:="http://my.namespace", ItemName:="codigoActo")> _
    Public Class listaActos
        Inherits List(Of String)
    End Class

    <DataContract(Name:="Root", Namespace:="http://my.namespace")> _
    Public Class Root
        <DataMember()> _
        Public Property listaActos As listaActos
    End Class

    Public Shared Sub Test()
        Dim list As listaActos = New listaActos()
        list.Add("01672")
        list.Add("01673")
        list.Add("01674")
        Dim root = New Root With {.listaActos = list}
        Dim dcs = New DataContractSerializer(GetType(Root))
        Dim ms = New MemoryStream()
        dcs.WriteObject(ms, root)
        Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()))
    End Sub
End Class
相关问题