gpt4 book ai didi

.net - 使用自定义 SerializerSettings 将 JToken 转换为 .NET 类型

转载 作者:行者123 更新时间:2023-12-05 04:01:52 25 4
gpt4 key购买 nike

Json.NET 将 JSON 解析与 .NET 对象的构造分开。特别应该

JsonConvert.DeserializeObject<MyType>(jsonString)

一样
JsonConvert.DeserializeObject<JToken>(jsonString).ToObject<MyType>()

ToObject 方法没有采用 SerializerSettings 的参数。那么如何指定 JSON 转换器和相关设置呢?

最佳答案

如果您已经将 JSON 解析为 JToken层次结构,你可以使用 JToken.ToObject<T>(JsonSerializer) 使用转换器反序列化为所需的类型:

var settings = new JsonSerializerSettings
{
Converters = { new MyTypeConverter() },
// Other settings as required.
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
};
var myType = jToken.ToObject<MyType>(JsonSerializer.CreateDefault(settings));

请注意 Json.NET 处理 DateTime和字符串标记化期间的浮点识别,因此如果将 JSON 反序列化分为两个阶段,stringJTokenMyType ,那么日期字符串和小数可能会过早地被解析和识别。您可能需要在最初解析 JSON 和/或延迟日期识别时指定适当的设置,如下所示:

var parseSettings = new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.None, // Defer date/time recognition until later.
FloatParseHandling = FloatParseHandling.Decimal, // Or Double if required.
};
var jToken = JsonConvert.DeserializeObject<JToken>(jsonString, parseSettings);

(相比之下,当在没有中间 JToken 表示的情况下直接从字符串反序列化为 POCO 时,序列化程序可以将“提示”传递给 JsonTextReader 分词器,以告知是否应将某些原始标记解释为日期、小数或者使用 ReadType 枚举。因此,枚举是 Newtonsoft 内部的。)

有关 DateTime 的更多信息解析见 Serializing Dates in JSON 。 sample fiddle here .

关于.net - 使用自定义 SerializerSettings 将 JToken 转换为 .NET 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54907568/

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