如何使用自定义JsonSerializerSettings处理数组创建

本文关键字:数组 创建 处理 JsonSerializerSettings 何使用 自定义 | 更新日期: 2023-09-27 18:04:46

我需要使用json中的$type属性来创建一些多态类型,所以我向反序列化程序添加了自定义设置:

var jsonSerializerSetting = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.Auto
};

然而,现在有了指定的设置,我就不能再反序列化数组了,比如:

var arr = (string[])JsonConvert.DeserializeObject(@"[ 'foo' ]", jsonSerializerSetting);

以结尾

无法强制转换"Newtonsoft"类型的对象。Json。林克。要键入的JArray’系统。字符串[]'

即使使用默认的new JsonSerializerSettings(),它也会失败。我想它一定是在重置什么,但我不知道是什么。

我可以恢复数组/列表等的创建,并保持创建多态类型的能力吗?

如何使用自定义JsonSerializerSettings处理数组创建

您看到的InvalidCastExceptionTypeNameHandling.Auto无关。问题是您没有使用DeserializeObject()的通用版本。你需要做:

var arr = JsonConvert.DeserializeObject<string []>(@"[ 'foo' ]", jsonSerializerSetting);

您正在使用的非泛型JsonConvert.DeserializeObject(string, JsonSerializerSettings)确实会返回一个LINQ到JSON JArray,它没有隐式或显式转换到string []