2017-02-03 8 views
1

меня эта строка JSON передается в моем WebAPIJson получить объект массив из JSON объект C#

string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}"; 

У меня может быть больше, чем на пару (K, V), внутри. Как разобрать это на C#?

Я думал, что смогу сначала преобразовать свою строку в JObject и получить ключ для datamodel, а затем использовать JArray для разбора K, V. Но его бросать исключение jsonreader на первой строке кода здесь

JObject my_obj = JsonConvert.DeserializeObject<JObject>(jsonstring.ToString()); 

, а затем сделать это ..

JObject data = my_obj["datamodel"].Value<JObject>(); 
+0

Что такое полный 'ToString()' выход за исключением, включая сообщения, отслеживающий и внутреннее исключение, если таковые имеются? – dbc

ответ

2

Прежде всего, строка JSON вы публикуете не является действительным Учитывая Ваш комментарий, вы можете. очистить кавычки до и после того, как квадратные скобки, используя этот фрагмент кода:.

string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";; 
string jsonstringCleaned = jsonstring.Replace("\"[", "[").Replace("]\"", "]"); 
var my_obj = JsonConvert.DeserializeObject<JObject>(jsonstringCleaned); 
+0

Если я выберу кавычки, как вы упомянули, это работает. Но строка, которую я получаю, как указано выше с кавычками ... (мы можем исправить цитату, которая отсутствовала около '\" V1 \ "') – cableload

+0

также после добавив \ "V1 \", и если я проверю его на JSONLINT [link] (http://www.jsonlint.com), он будет подтвержден как действительный JSON – cableload

+0

. Я добавил код для очистки котировок вокруг квадратной скобки – Jaco

1

код является правильным, но исключение вы получаете связано с форматированием ваша строка JSON. Если вы ставите действительный JSON в этот код, он должен работать как ожидалось.

1

Там являются \»не хватает около V1 в вашем JSON строки Это должно выглядеть следующим образом:.

string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}"; 
0

Сначала всегда убедитесь, что у вас есть действительный строку JSON простой способ сделать это вставить его в инструмент Json для C# конвертер, такой как этот: http://json2csharp.com/

Это может быть проще и более удобным для чтения, чтобы использовать одинарные кавычки внутри вашей строки Json, если это вариант, поскольку он позволяет избежать необходимости экранировать двойные кавычки:

string jsonstring = "{'datamodel': [{'K1':'V1','K2':'V2'}]}" 

Теперь мы десериализации объекта и получить JArray. Нет необходимости вызывать ToString() в строке JSON jsonstring.

var my_obj = JsonConvert.DeserializeObject<JObject>(jsonstring); 
    var data = (JArray)my_obj["datamodel"]; 

А лучше и более краткий способ добиться того же результата можно было бы просто использовать JObject.Parse. Мы можем добиться того же результата только с одной строкой кода.

var data = (JArray)JObject.Parse(jsonstring)["datamodel"]; 
Смежные вопросы