我正在尝试使用 EasyNetQ 发送复杂对象,但我不断遇到此异常,因为我的对象包含引用回父对象的子对象列表:
Self referencing loop detected for property 'Parent' with type 'Domain.ParentItem'.
Path 'Entity.Children[0]'."}
我尝试像这样更改 JSON.NET 默认设置,但它不能解决问题:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
如何更改 Json 序列化程序的默认设置,以便无需创建单独的 DTO 对象即可解决此问题?
编辑:我已经尝试了可能重复的建议(正如我在原始帖子中放置的那样),但它没有解决问题。
首先,你需要创建一个实现ISerializer
接口的类。
例如:
public class MyCustomSerializaer : ISerializer
{
// Add appropriate implementation containing your custom
// serialization/deserialization logic here
}
接下来,您需要创建一个方法,该方法将使用 IServiceRegister
的实例注册此类的实例:
public void RegisterServices(IServiceRegister serviceRegister)
{
serviceRegister.Register(serviceProvider => new MyCustomSerializer());
}
注意:为了清楚起见,我将RegisterServices
作为单独的方法编写;但是,如果您愿意,您可以使用Action<IServiceRegister>
来代替简洁。
最后,在调用RabbitHutch.CreateBus
时提供RegisterServices
作为参数:
var bus = RabbitHutch.CreateBus(connectionString, RegisterServices);
这将确保bus
将使用自定义序列化类而不是 EasyNetQ 的默认序列化程序。请注意确保生产者和使用者使用的是兼容的序列化程序实现;否则,您的使用者将收到他们无法反序列化的消息。
请注意,EasyNetQ也允许更换其他组件。有关更多信息,请参阅此处。