.net - RabbitMQ/C# 消息序列化
问题描述
嘿,我在通过 newtonsoft 和 rabbitMQ 序列化我的 POCO 时遇到了一些问题,它们都实现了 IMessage 接口,但是 POCO 本身并不在应用程序之间共享,总而言之,我有一个 IMessage 接口和两个 Message : IMessage 类,每个项目一个,但是它们具有相同的结构,这就是为什么我想知道为什么 newtonsoft 不能序列化它们。
顺便说一句,我试图遵循一些人https://github.com/devmentors在这里开发的内容。
图案看起来像这样
pub 发布 UserCreated -> rabbitmq 总线 -> 订阅者接收 UserCreated 但 UserCreated 是两个不同的类,它们都实现了 IEvent 或其他一些标记接口
订户
using System;
using Core;
using Newtonsoft.Json;
using RawRabbit.vNext;
namespace Not
{
class Sub
{
public void Subscribe<TMessage>() where TMessage : IMessage
{
var client = BusClientFactory.CreateDefault();
client.SubscribeAsync<TMessage>(async (message, ctx) =>
{
Console.WriteLine(typeof(Message));
Console.WriteLine(message);
},
c =>
{
c.WithExchange(q => { q.WithName(typeof(Message).Name); });
c.WithRoutingKey("example");
});
}
}
class Message : IMessage
{
[JsonConstructor]
public Message(string body)
{
Body = body;
}
public string Body { get; set; }
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Sub");
var sub = new Sub();
sub.Subscribe<Message>();
Console.ReadLine();
}
}
}
和我的出版商
using System;
using Core;
using Newtonsoft.Json;
using RawRabbit.vNext;
namespace Acceptable
{
public class Message : IMessage
{
public string Body { get; set; }
[JsonConstructor]
public Message(string body)
{
Body = body;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Pub");
var client = BusClientFactory.CreateDefault();
while (true)
{
var input = Console.ReadLine();
var message = new Message(input);
client.PublishAsync(message, configuration: c =>
{
c.WithRoutingKey(typeof(Message).Name);
c.WithExchange(e => e.WithName(typeof(Message).Name));
});
}
}
}
}
目前我收到此错误https://i.imgur.com/hvHiXWw.png
'JSON 中指定的类型'Acceptable.Message, Acceptable, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 与'Not.Message, Not, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'不兼容'。路径'$type',第 1 行,位置 51。
而且我不知道为什么它们不兼容,它们都实现了 IMessage 并具有相同的道具。
解决方案
推荐阅读
- javascript - 如何仅在 ckEditor 中提交表单时上传图像?
- .net - 应用程序/问题+json 和 .net 6 个最小 API?
- arduino - 关于定时器和水位传感器激活的两个伺服项目的问题
- php - 使用 Guzzle 和 Magento 时获得 401 未授权
- ios15 - “未能获得进程 -1 的任务”
- python - 如何加快搜索最近的地理点?
- javascript - JavaScript 使用数组在嵌套对象中查找属性
- android - Xamarin Forms Android - 使用 MSAL 库部署时身份验证失败
- r - R 中的 ArcGIS Dissolve 等效项
- c - 为什么这段代码有效?常量数组上的 memcpy