本文传输的数据类为:
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; }
以上是我个人理解,新手勿喷。。。