WCF 传输Dictionary<string, object>数据问题

本文传输的数据类为:

 ManageRelationInfo GetRelationinfo(string userid, int target_type, int count, out bool isfinished);

 其中 ManageRelationInfo 实体类为:

[KnownType(typeof(MongoDB.Bson.ObjectId))] 
public class ManageRelationInfo
    {
        [DataMember] 
        public MongoDB.Bson.ObjectId _id;
        [DataMember] 
        public ObjectId target_id { get; set; }

        private List<Dictionary<string, object>> _target_id2_list;
        [DataMember]
        public List<Dictionary<string, object>> target_id2_list
        {
            get{ return _target_id2_list;}
            set{_target_id2_list = value;}
        }
        [DataMember] 
        public string remark { get; set; }
        [DataMember] 
        public string bak_field { get; set; }
        [DataMember] 
        public int comment_count { get; set; }
        /// <summary>
        ///自定义object 对象 目的让 WCF 序列化 Dictionary<string, object>  中的object 对象,从而通过
        ///KnownType 识别其类型
        /// </summary>
        [DataMember]
        [BsonIgnore]
        public object obj { get; set; }
    }

在 客户端接收数据的时候 发现报错 “***这可能是由于服务终结点绑定未使用 HTTP 协议造成的***”

我一开始认为 是由于传输数据量过大的问题 结果测试发现不是,原因是 WCF 无法序列化Dictionary<string, object> 包含object 类型的数据。

通过收集网上的资料以及解决办法,终于解决了这个问题。

我的Dictionary<string, object> 包含 Dictionary<string, int>,Dictionary<string, string>,Dictionary<string, ObjectId>三种类型的,其中string,int WCF肯定都能序列化的,我都测试过了。所以 只要在实体类上面声明下

[KnownType(typeof(MongoDB.Bson.ObjectId))] 
这个类型 让 WCF识别这种类型的数据。

接着就是 在实体类中添加 object 属性 让WCF明确知道Dictionary<string, object> 中的object 的存在

 [DataMember]
 public object obj { get; set; }

以上是我个人理解,新手勿喷。。。






©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页