gpt4 book ai didi

json - 如何在自定义 JsonConverter 中使用默认序列化

转载 作者:IT老高 更新时间:2023-10-28 12:51:53 25 4
gpt4 key购买 nike

我有一个复杂的对象图,我正在使用 Json.NET 进行序列化/反序列化。一些对象派生自抽象类,所以为了使反序列化正常工作,我需要创建一个自定义的 JsonConverter。它的唯一作用是在反序列化时选择抽象类的适当具体实现,并允许 Json.NET 继续前进。

当我想序列化时,我的问题就来了。我根本不需要做任何定制的事情。我想获得与使用 JsonConvert.SerializeObject 没有自定义 JsonConverter 完全相同的行为。

但是,由于我使用自定义 JsonConverter 类来满足我的反序列化需求,我不得不提供 WriteJson 实现。由于 WriteJson 是抽象的,我不能只调用 base.WriteJson,但我想从本质上做到这一点。所以我的问题是,我在该方法中添加了什么来获得简单的默认行为?换句话说:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// What goes here to get default processing?
}

最佳答案

在您的自定义 JsonConverter , 覆盖 CanWrite 并返回 false:

public override bool CanWrite { get { return false; } }

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}

然后你可以从 WriteJson 抛出异常,因为它不会被调用。

(同样,要在序列化期间获得默认行为,请覆盖 CanRead 并返回 false。)

请注意,同样的方法可用于 JsonConverter<T> (在 Json.NET 11.0.1 中引入)因为它只是 JsonConverter 的子类引入了 ReadJson() 的类型安全版本和 WriteJson() .

关于json - 如何在自定义 JsonConverter 中使用默认序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com