使用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>
提前致谢!!
答案 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