2016-04-03 5 views
0

JSON строки:Ошибка при разборе 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()); 

Когда я выполняю этот код, то будет ошибка:

Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path '', line 1, position 1.

Я довольно что этот код работал в другом проекте.

В чем моя ошибка?

+3

Извлеките '[' и ']' из вашей строки и повторите попытку. Это массив. –

+3

Или, скорее всего, переключитесь на 'Newtonsoft.Json.Linq.JArray.Parse'. Это позволит принять ваш существующий вход. 'JToken' также будет работать как для массивов (что у вас есть), так и для объектов. –

+1

Если вы не знаете заранее, если корневой объект является массивом или объектом, используйте ['JToken.Parse()'] (http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JToken_Parse.htm) , – dbc

ответ

4

Вы не предоставляют объект JSON, вы предоставляете массив JSON с одного объекта внутри него:

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

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

Итак, либо изменить JSON или код Json.NET (и искать JArray как в комментариях).

BTW, если вы знаете заранее, вы должны создать класс .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); 
Смежные вопросы