0
[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 的任何线索?

4

1 回答 1

0

我通过添加IsReference = true到我的 DataContract 类 AssetData 解决了这个问题。对象图具有对 AssetData 类的其他实例的引用。ChildAssets 成员只是对 AssetData 其他实例的引用。

于 2012-07-23T06:55:52.217 回答