[DataContract]
public class AssetData
{
[DataMember]
public string Name { get; set; }
[DataMember]
public List<AssetData> ChildAssets { get; set; }
[DataMember]
public int Priority { get; set; }
[DataMember]
public AssetData ParentNode { get; set; }
}
[ServiceKnownType(typeof(Dictionary<string, AssetData>))]
public interface IRtxEquipmentConfiguration
{
[OperationContract]
object GetData(string sKey, string sRequest);
}
对于上述 OperationContract "GetData"
,服务器将返回 AssetData 字典。我已将 AssetData 标记为 DataContract,并将其所有字段标记为 DataMembers。在客户端,我收到 wcf 错误“套接字连接已被释放。\r\n对象名称:'System.ServiceModel.Channels.SocketConnection'。”。我怀疑这个错误是因为 ChildAssets 字段。当我单独禁用此字段时(通过删除 DataMember 标记),然后在客户端,我能够获取所有 Dictionary 元素,并在每个元素中获取除 ChildAssets 之外的所有字段。我能够看到剩余的字段名称、父节点和优先级。
为什么 WCF 无法在 Dictionary 元素中序列化 List 的任何线索?