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

时间:2016-08-30 10:18:38

标签: c# arrays json json.net

我需要使用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类型吗?

1 个答案:

答案 0 :(得分:1)

您看到的InvalidCastExceptionTypeNameHandling.Auto无关。问题是您没有使用DeserializeObject()的{​​{3}}。你需要这样做:

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

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