Привет, у меня возникли проблемы с сериализацией моих POCO через newtonsoft и rabbitMQ,
они оба реализуют интерфейс IMessage, но сами POCO не разделяются между приложениями, чтобы подвести итог, у меня есть один интерфейс IMessage и два сообщения: классы 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,
Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null 'не
совместим с «Not.Message, Not, версия = 1.0.0.0, культура = нейтральная,
PublicKeyToken = нуль. Путь '$ type', строка 1, позиция 51. '
и я не знаю, почему они не совместимы, они оба реализуют IMessage и имеют одинаковые реквизиты.