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


        
    原因分析:
       队列中存储的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; }
     



  • 相关阅读:
    php 压缩文件 zip
    php 创建返回结果配置文件 实例
    php 生成xml文件
    php 获取读取文件内容
    基于JAVA语言的多线程技术
    Java HTTP请求
    TCP与UDP
    VC6.0 调试.dll文件
    [JNI] Java 调用 C++ dll
    HTTPS与SSL
  • 原文地址:https://www.cnblogs.com/gossip/p/4505570.html
Copyright © 2020-2023  润新知