【问题标题】:How to handle array creation with custom JsonSerializerSettings?如何使用自定义 JsonSerializerSettings 处理数组创建?
【发布时间】:2016-08-30 10:18:37
【问题描述】:

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

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

但是现在有了指定的设置,我不能再反序列化数组了:

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

结尾:

无法将类型为“Newtonsoft.Json.Linq.JArray”的对象转换为类型 'System.String[]'

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

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

【问题讨论】:

    标签: c# arrays json json.net


    【解决方案1】:

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

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

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

    【讨论】:

    • 哇,谢谢,这个太简单了 ;-) 我在添加设置之前和之后都使用了演员表,我想知道为什么它不再起作用了。我没想到它实际上可能是泛型参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    相关资源
    最近更新 更多