【问题标题】:Error during JSON parsingJSON解析时出错
【发布时间】:2016-04-04 01:30:16
【问题描述】:

JSON 字符串:

[{"id":"1","username":"admin","password":"anymd5hash","rank":"2"}]

以下代码:

Newtonsoft.Json.Linq.JObject userData;
userData = Newtonsoft.Json.Linq.JObject.Parse(result);
MessageBox.Show(userData["username"].ToString());

当我执行这段代码时,会出现错误:

从 JsonReader 读取 JObject 时出错。当前的 JsonReader 项目不是 一个对象:StartArray。路径'',第 1 行,位置 1。

我很确定,这段代码已经在另一个项目中工作了。

我的错误是什么?

【问题讨论】:

  • 从您的字符串中删除[],然后重试。这是一个数组。
  • 或者更有可能切换到Newtonsoft.Json.Linq.JArray.Parse。这将接受您现有的输入。 JToken 也适用于数组(你所拥有的)或对象。
  • 如果事先不知道根对象是数组还是对象,使用JToken.Parse()

标签: c# json json.net


【解决方案1】:

您提供的不是 Json 对象,而是提供一个 Json 数组,其中包含一个对象:

// Json object:
{
  "id": "1",
  ...
}

//Json array:
[
  {
    "id": "1",
    ...
  }
]

因此,您要么更改 json 代码,要么更改 Json.Net 代码(并在 cmets 中查找 JArray)。

顺便说一句,如果你事先知道属性,你真的应该创建一个 .Net 类来包含反序列化。

public class UserData
{
  public string id { get; set; }
  public string username { get; set; }
  public string password { get; set; }
  public string rank { get; set; }
}

// and then, in your code:
List<UserData> userData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<UserData>>(result);

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2017-05-04
    • 1970-01-01
    相关资源
    最近更新 更多