我需要使用json中的$type
属性创建一些多态类型,所以我将自定义设置添加到反序列化器中:
var jsonSerializerSetting = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
};
但是现在指定了设置我不能再反序列化数组了,如下所示:
var arr = (string[])JsonConvert.DeserializeObject(@"[ 'foo' ]", jsonSerializerSetting);
结束于:
无法将“Newtonsoft.Json.Linq.JArray”类型的对象强制转换为类型 'System.String []'
即使使用默认new JsonSerializerSettings()
,它也会失败。我想它必须重置一些东西,但我无法弄清楚是什么。
我可以将数组/列表等创建回来并仍然能够创建polimorphic类型吗?
答案 0 :(得分:1)
您看到的InvalidCastException
与TypeNameHandling.Auto
无关。问题是您没有使用DeserializeObject()
的{{3}}。你需要这样做:
var arr = JsonConvert.DeserializeObject<string []>(@"[ 'foo' ]", jsonSerializerSetting);
您正在使用的非泛型generic version确实会返回一个LINQ-to-JSON JsonConvert.DeserializeObject(string, JsonSerializerSettings)
,它没有隐式或显式转换为string []
。