使用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; }
时间: 2024-12-29 05:08:17

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

Caused by: com.rabbitmq.client.ShutdownSignalException: connection error

周五下午的时候升级了一个环境,跑了批处理sh升级脚本后,启动时报下列错误: INFO | jvm 1 | 2017/02/24 17:39:09 | java.io.IOException INFO | jvm 1 | 2017/02/24 17:39:09 | at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106) INFO | jvm 1 | 2017/02/24 17:39:09 | at com.rabbitmq.

com.rabbitmq.client.ShutdownSignalException: connection error

com.rabbitmq.client.ShutdownSignalException: connection error. 最近研究rabbitMQ,写的第一个例子的时候,是参照网上的例子.但是环境是centos6.7.之前遇到的小问题,在网上都好找到,就不写了. 在使用浏览器可以访问,但是用程序就访问不到了.是因为浏览器访问的端口是15672. 但是用java程序连接,端口就变成了5672. 所有需要在linux中,将5672端口开放. -A INPUT -m state --state N

对RabbitMQ.Client进行一下小小的包装,绝对实用方便

RabbitMQ是一个老牌的非微软的消息队列组件,一般来说应该能满足中小型公司对消息队列生产的需求,平时我们在.NET开发环境下运用它是可能会需要RabbitMQ.Client的SDK库,此库是官网提供,目前最新发布版本是v4.1.3.在我们对接项目时有时需要碰到对接上的注意,随之而来感觉对官方提供的SDK客户端还可以进行一次包装开发. Nuget安装命令:Install-Package RabbitMQ.Client.Wrap GitHub地址:https://github.com/rjf19

com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)

RabbitMQ 基于Erlang 实现, 客户端可以用Python | Java | Ruby | PHP | C# | Javascript | Go等语言来实现.这里做个java语言的测试.首先安装好RabbitMQ 服务端. maven依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.0

com.rabbitmq.client.impl.ForgivingExceptionHandler.log:119 -An unexpected connection driver error occured

在服务器上安装了一个RabbitMq,并新创建了一个用户授予了管理员角色,登录控制台查看一切正常,兴高采烈启动项目进行连接,结果一盆冷水下来,报如下错误: o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s). org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connect

定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式. 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2) 求两个复数的差的方法:(参数

【RabbitMQ】反序列化失败 com.fasterxml.jackson.databind.exc.MismatchedInputException

记一次RabbitMQ,使用Jackson反序列化的报错: 报错: Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `[B` out of START_OBJECT token at [Source: (String)"{"id":1,"userName":"jack","

RabbitMQ client ( java )

Maven 依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.5.4</version> </dependency> GitHub https://github.com/rabbitmq/rabbitmq-java-client/archives/master 文档 ht

Golang RabbitMQ Client amqp -&gt; “Hello World!”

发送程序 package main import ( "fmt" "log" "github.com/streadway/amqp" ) func failOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) panic(fmt.Sprintf("%s: %s", msg, err)) } } func