【问题标题】:NewtonSoft Json.NET and Single Element ArraysNewtonSoft Json.NET 和单元素数组
【发布时间】:2015-03-20 16:09:19
【问题描述】:

我有一些 JSon 正在使用 ToObject 方法转换为对象。

这个 Json 的一部分有一个重复的元素,它在 Json 文本中正确地表示为一个数组。当我正确转换它时,它被映射到 C# 对象

public IList<FooData> Foo { get; set; }

但是当我只有 1 个元素时,我收到一条错误消息,指出我试图解析为对象的 Json 不是数组,因为它周围没有 []

Json.NET 是否支持单元素数组?

【问题讨论】:

标签: c# arrays json json.net


【解决方案1】:

但是当我只有 1 个元素时,我收到一条错误消息,指出 Json 我试图解析成一个对象不是一个数组,因为它 周围没有 []。

如果 JSON 文本周围没有 [],那么它就不是单元素数组:实际上它是一个对象(例如:{ "text": "hello world" })。

尝试使用JsonConvert.DeserializeObject方法:

jsonText = jsonText.Trim();

// If your JSON string starts with [, it's an array...
if(jsonText.StartsWith("["))
{
    var array = JsonConvert.DeserializeObject<IEnumerable<string>>(jsonText);
}
else // Otherwise, it's an object...
{
    var someObject = JsonConvert.DeserializeObject<YourClass>(jsonText);
}

JSON 文本也可能包含像 1"hello world" 这样的文字值...但我相信这些都是非常极端的情况...

对于上述边缘情况,只需使用 JsonConvert.DeserializeObject&lt;string&gt;(jsonText) 反序列化它们(例如,将 string 替换为 int 或其他...)。

【讨论】:

    【解决方案2】:

    确保您的 JSON 单项数组仍被指定为使用数组表示法 [] 的数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2017-01-19
      • 1970-01-01
      • 2021-03-16
      • 2016-09-10
      • 1970-01-01
      相关资源
      最近更新 更多