更改 JSON.NET 序列化设置



我正在尝试使用 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也允许更换其他组件。有关更多信息,请参阅此处。

相关内容

  • 没有找到相关文章

最新更新