码迷,mamicode.com
首页 > 其他好文 > 详细

使用Rabbitmq.client反序列化包含Mongo.Bson.ObjectId属性实体类时抛异常

时间:2015-05-15 13:21:11      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

    
原因分析:
   队列中存储的objectId属性是字符串,反序列化字符串转换成objectid类型时报错
 
 
解决方法:
   1、定义ObjectIdConverter属性类,反序列化时将字符串转换成ObjectId
   
  class ObjectIdConverter : JsonConverter
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            serializer.Serialize(writer, value.ToString());
        }

        /// <summary>
        //  反序列化时将字符串转换成ObjectId类型
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="objectType"></param>
        /// <param name="existingValue"></param>
        /// <param name="serializer"></param>
        /// <returns></returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
           return new ObjectId(serializer.Deserialize(reader).ToString());
        }

        public override bool CanConvert(Type objectType)
        {
            return typeof(ObjectId).IsAssignableFrom(objectType);
        }
    }

 

   2、将该属性类应用到ObjectId属性上
     [BsonId]
        [JsonConverter(typeof(ObjectIdConverter))]
        public ObjectId Id { get; set; }

 

 



使用Rabbitmq.client反序列化包含Mongo.Bson.ObjectId属性实体类时抛异常

标签:

原文地址:http://www.cnblogs.com/gossip/p/4505570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!