2016-01-27 2 views
0

Я хочу, чтобы разобрать эту строку JSON:Не действует в JSON C#, хотя это должно быть

string downloadedString = "[ { \"type\" : 2, \"value\" : \"Las Terrenas\", \"label\" : \"Las Terrenas, (Dom. Republik Halbinsel Samana, Karibik)\", \"regionCode\" : \"KB\", \"zielCode\" : \"AZS\", \"ortCode\" : \"67\", \"giataCode\" : null, \"chainCode\" : null}, { \"type\" : 2, \"value\" : \"Las Caletillas\", \"label\" : \"Las Caletillas, (Teneriffa, Kanaren)\", \"regionCode\" : \"KA\", \"zielCode\" : \"TEN\", \"ortCode\" : \"830\", \"giataCode\" : null, \"chainCode\" : null}, { \"type\" : 2, \"value\" : \"Las Tricias\", \"label\" : \"Las Tricias, (La Palma, Kanaren)\", \"regionCode\" : \"KA\", \"zielCode\" : \"SPC\", \"ortCode\" : \"10034\", \"giataCode\" : null, \"chainCode\" : null}, { \"type\" : 2, \"value\" : \"Las Norias\", \"label\" : \"Las Norias, (La Palma, Kanaren)\", \"regionCode\" : \"KA\", \"zielCode\" : \"SPC\", \"ortCode\" : \"6179\", \"giataCode\" : null, \"chainCode\" : null}, { \"type\" : 2, \"value\" : \"Las Manchas\", \"label\" : \"Las Manchas, (La Palma, Kanaren)\", \"regionCode\" : \"KA\", \"zielCode\" : \"SPC\", \"ortCode\" : \"1061\", \"giataCode\" : null, \"chainCode\" : null} ]"; 
JObject json = JObject.Parse(downloadedString); 

Но я получаю сообщение об ошибке, что это не является допустимым JSON.

Если я вместо этого запускаю строку через валидатор lint json по адресу: http://jsonlint.com/ , тогда результат будет «действительным json». Конечно, я должен сделать заменить \ «с» перед тестированием на jsonlint и поэтому строка я буду использовать будет немного другое:

[{"type" : 2, "value" : "Las Terrenas", "label" : "Las Terrenas, (Dom. Republik Halbinsel Samana, Karibik)", "regionCode" : "KB", "zielCode" : "AZS", "ortCode" : "67", "giataCode" : null, "chainCode" : null}, { "type" : 2, "value" : "Las Caletillas", "label" : "Las Caletillas, (Teneriffa, Kanaren)", "regionCode" : "KA", "zielCode" : "TEN", "ortCode" : "830", "giataCode" : null, "chainCode" : null}, { "type" : 2, "value" : "Las Tricias", "label" : "Las Tricias, (La Palma, Kanaren)", "regionCode" : "KA", "zielCode" : "SPC", "ortCode" : "10034", "giataCode" : null, "chainCode" : null}, { "type" : 2, "value" : "Las Norias", "label" : "Las Norias, (La Palma, Kanaren)", "regionCode" : "KA", "zielCode" : "SPC", "ortCode" : "6179", "giataCode" : null, "chainCode" : null}, { "type" : 2, "value" : "Las Manchas", "label" : "Las Manchas, (La Palma, Kanaren)", "regionCode" : "KA", "zielCode" : "SPC", "ortCode" : "1061", "giataCode" : null, "chainCode" : null} ] 

Может кто-нибудь сказать мне, почему код JSON выше не является действительным json в C#?

+0

Было бы неплохо, если бы сообщение об ошибке из JObject.Parse() было более полезным. Msgstr "Недействительный JObject. Вы пытались использовать JArray.Parse()?" действительно помогли бы здесь. –

+0

@Tokn Фактически это сообщение об исключении: «* Ошибка чтения JObject из JsonReader. Текущий элемент JsonReader не является объектом: StartArray. Путь '', строка 1, позиция 1. *". Что касается меня, он содержит достаточно информации для вывода, что мы пытаемся проанализировать массив. –

+0

@ AndyKorneyev да, это намного лучше, чем отчеты OP - «недействительный json». –

ответ

4

Это JSON массив, а не один объект, поэтому он должен быть обработан другим способом:

JArray json = JArray.Parse(downloadedString); 

, а затем вы можете получить доступ к его элементам, как json[i].

+0

избил меня! ;) – Arcturus

1

Для легкого доступа к десериализованному объекту, я предлагаю вам добавить класс для объекта JSON, как показано ниже:

public class MyJsonObject 
{ 
    public string Type { get; set; } 
    public string Value { get; set; } 
    public string Label { get; set; } 
    public string RegionCode { get; set; } 
    public string ZielCode { get; set; } 
    public string OrtCode { get; set; } 
    public string GiataCode { get; set; } 
    public string ChainCode { get; set; } 
} 

Затем, вы можете использовать следующую команду, чтобы бросить свой JSON строку:

IList<MyJsonObject> json = JsonConvert.DeserializeObject<IList<MyJsonObject>>(downloadedString); 
Смежные вопросы