我需要使用json中的$type
属性来创建一些多态类型,所以我向反序列化程序添加了自定义设置:
var jsonSerializerSetting = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
};
然而,现在有了指定的设置,我就不能再反序列化数组了,比如:
var arr = (string[])JsonConvert.DeserializeObject(@"[ 'foo' ]", jsonSerializerSetting);
以结尾
无法强制转换"Newtonsoft"类型的对象。Json。林克。要键入的JArray’系统。字符串[]'
即使使用默认的new JsonSerializerSettings()
,它也会失败。我想它一定是在重置什么,但我不知道是什么。
我可以恢复数组/列表等的创建,并保持创建多态类型的能力吗?
您看到的InvalidCastException
与TypeNameHandling.Auto
无关。问题是您没有使用DeserializeObject()
的通用版本。你需要做:
var arr = JsonConvert.DeserializeObject<string []>(@"[ 'foo' ]", jsonSerializerSetting);
您正在使用的非泛型JsonConvert.DeserializeObject(string, JsonSerializerSettings)
确实会返回一个LINQ到JSON JArray
,它没有隐式或显式转换到string []
。