【问题标题】:How do I deserialize a JSON array that contains only values?如何反序列化仅包含值的 JSON 数组?
【发布时间】:2015-05-14 02:13:45
【问题描述】:

我从一个网络函数中得到这个结果。

["767,20150221122715,121053103,14573465,1,7,302",
"767,20150221122756,121053165,14573375,1,0,302",
"767,20150221122840,121053498,14572841,1,12,124"]

通常 Json 有 PropertyName: Value 但这有一个字符串数组,每个字符串都有用逗号分隔的值。我知道每个值位置的含义。

我尝试使用JsonConvert.DeserializeObject,但无法正常工作。

string deserializedProduct = JsonConvert.DeserializeObject<string>(json);
//and
List<string> deserializedProduct = JsonConvert.DeserializeObject<string>(json);

我可以解析字符串进行拆分,但我想知道是否有简单的方法。

【问题讨论】:

  • 你能edit你的问题的标题是真正有意义的吗? 这是一个 JSON 字符串 没有任何意义,对于以后在搜索结果中找到它的任何人来说都是绝对无关的。标题应该解释您遇到的问题或您要问的问题。谢谢。
  • @KenWhite:这是一条评论 :)
  • @leppie:正是我的观点。这当然不是问题。
  • 你得到的 JSON 结果是一个完全合法的 JSON 数组,我建议你阅读这个stackoverflow.com/questions/18192357/…
  • 我将其更改为“这是一个正确的 Json 字符串吗?”

标签: c# json json.net


【解决方案1】:

DeserializeObject&lt;T&gt;() 方法的泛型参数是您希望反序列化器反序列化到的类型。您的 json 字符串表示一个字符串数组,因此您应该反序列化为字符串集合(通常为 List&lt;string&gt;)。

var values = JsonConvert.DeserializeObject<List<string>>(json);

但是,没有必要指定类型。有一个返回object 的非泛型重载。它将(在这种情况下)返回具有适当值的 JArray 的实例。

object values = JsonConvert.Deserialize(json);

不过,如果可能,最好返回更具体的类型。为了使其更通用,您可以将JToken 用于泛型类型,或者更具体地说,使用JArray

var values = JsonConvert.Deserialize<JToken>(json); // good
var values = JsonConvert.Deserialize<JArray>(json); // better in this case

【讨论】:

    【解决方案2】:

    为了回答您的问题,根据http://json.org/,它是一个有效的 JSON 值(字符串数组)。

    要根据this stack overflow question 对其进行反序列化,您应该使用 JsonConvert.DeserializeObject&lt;List&lt;string&gt;&gt;(json); 转换它

    【讨论】:

    • 您的第一个假设是 JSON 结果是 invaldi ,这无助于您寻找答案,我建议您在链接的 SO 问题中为人们投票,这将对未来的人们有所帮助跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2022-10-14
    相关资源
    最近更新 更多