gpt4 book ai didi

c# - 使用不带属性的 Newtonsoft.Json 序列化和反序列化自定义类型

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:54 26 4
gpt4 key购买 nike

我知道可以使用 JsonConverter 进行自定义序列化/反序列化。但我不想通过属性来应用它,而是通过代码。

我的框架有对序列化器的插件支持,我现在要添加 Newtonsoft JSON 支持。因此,我不想将特定于 newtonsoft 的属性添加到我的类型中。有没有办法以任何其他方式将 JsonConverter 应用于特定类型?

我想做一些事情:

  serializer.AddTypeHandler(typeof(MyType), serializeFunction, deserializeFunction);

除了 attribs 之外的任何方式都很好..

最佳答案

是的,Json.Net 具有可用于此目的的“ContractResolver”概念。制作自定义解析器的最简单方法是从 DefaultContractResolver 继承。然后您可以覆盖 CreateContract 方法以根据需要将转换器应用于特定类型。例如:

class CustomResolver : DefaultContractResolver
{
protected override JsonContract CreateContract(Type objectType)
{
JsonContract contract = base.CreateContract(objectType);
if (objectType == typeof(Foo))
{
contract.Converter = new FooConverter();
}
return contract;
}
}

您可以像这样将解析器应用于序列化器:

JsonSerializerSettings settings = new JsonSerializerSettings
{
ContractResolver = new CustomResolver()
};

string json = JsonConvert.SerializeObject(foo, settings);

关于c# - 使用不带属性的 Newtonsoft.Json 序列化和反序列化自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268478/

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