首页 文章

WCF无法在Dictionary元素中反序列化List

提问于
浏览
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错误"The socket connection has been disposed.\r\nObject name: 'System.ServiceModel.Channels.SocketConnection'." . 我怀疑这个错误是因为字段ChildAssets . 当我单独禁用此字段时(通过删除DataMember标记),然后在客户端,我能够获取所有Dictionary元素,并在每个元素中包含除ChildAssets之外的所有字段 . 我能够看到剩余的字段Name,ParentNode和Priority .

任何线索为什么WCF无法在Dictionary元素中序列化List?

1 回答

  • 0

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

相关问题