我有类似流动的两个简单类:
<DataContract> _
Public Class C1
Public Sub New(x_ As Int64)
_x= x_
End Sub
<DataMember()> _
Public Property x As Int64
End Class
<DataContract> _
Public Class C2
Public Sub New(y_ As string)
_y= y_
End Sub
<DataMember()> _
Public Property y As string
End Class
以及由以下两者组成的以下结构:
<DataContract, StructLayout(LayoutKind.Sequential), _
KnownType(GetType(C1)), KnownType(GetType(C2))> _
Public structure S1
<DataMember, MessageHeaderArray> _
Public Second() As C1
<DataMember> _
Public First As C2
End structure
最后,我从服务器的接口调用一个sub来发送这些结构的数组,如下所示:
<ServiceContract(CallbackContract:=GetType(IClient))> _
Public Interface IServer
<OperationContract> _
Sub SendToServer(ByVal S()As S1)
End Interface
问题是当我尝试使用WCF传递此信息时,我遇到以下格式的奇怪异常:
NetDataContractSerializer不支持使用类型“S1”作为只获取集合。请考虑使用CollectionDataContractAttribute属性或SerializableAttribute属性标记类型,或者向属性添加setter。
我尝试使用这两个建议的属性,但我发现它们应该用于声明类型public class xx(Of T)
的新类集合,而不是我的情况(一个例外,说明使用时),我真的可以'了解他所说的哪个get-only属性,因为我没有,无论如何,从结构中删除Public Second() As C1
,或传递数组结构实例的一个实例,修复了问题。
所以我尝试将S1更改为类而不是结构,并将数组更改为带有get&amp;的List。设置零件,但没有任何帮助,任何线索是什么在这里?
答案 0 :(得分:0)
你有使用NetDataContractSerializer的原因吗?除非您尝试支持某些遗留代码,否则我相信您应该使用DataContractSerializer。