2013-11-15 3 views
0

Я попытался использовать Newtonsoft.Json для десериализации этой строки json, но я не получаю желаемый результат. моя JSON строкаНевозможно проанализировать эту строку Json в C#

[ 
{ 
"id": 1, 
"key": "Residential Homeowner", 
"i18nText": "unknown message code DB_ENUM_UserType_residentialhomeowner", 
"i18nKey": "DB_ENUM_UserType_residentialhomeowner" 
}, 
{ 
"id": 8, 
"key": "VAR Dealer \/ Builder", 
"i18nText": "unknown message code DB_ENUM_UserType_vardealer\/builder", 
"i18nKey": "DB_ENUM_UserType_vardealer\/builder" 
}, 
{ 
"id": 2, 
"key": "Administrator", 
"i18nText": "unknown message code DB_ENUM_UserType_administrator", 
"i18nKey": "DB_ENUM_UserType_administrator" 
}, 
{ 
"id": 9998, 
"key": "TempGuidUser", 
"i18nText": "unknown message code DB_ENUM_UserType_tempguiduser", 
"i18nKey": "DB_ENUM_UserType_tempguiduser" 
}, 
{ 
"id": 9999, 
"key": "GuidUser", 
"i18nText": "unknown message code DB_ENUM_UserType_guiduser", 
"i18nKey": "DB_ENUM_UserType_guiduser" 
} 
] 

Я просто хочу, значение ключа, когда значение ИД = 1. Обычно json начинается с {} (фигурная скобка), но здесь это как [] (квадратная скобка). Я видел много примеров, но никто не работал для меня.

+0

возможно дубликат [массив объекта десериализации JSON с Json.NET] (http://stackoverflow.com/questions/18192357/deserializing-json-object-array-with-json- net) – James

ответ

3

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

Пример:

JArray values = JArray.Parse(json); 

string key; 
var keyObject = values.FirstOrDefault(p => (int)p["id"] == 1); 
if (keyObject != null) 
{ 
    key = (string)keyObject["key"]; 
} 
+0

работает и просто. :) благодаря –

3

Обычно начинается с JSON {} (фигурной скобкой), но здесь, как [] (квадратная скобка).

Это потому, что у вас есть массив объектов, а не один объект. Массивы сериализуются с квадратными скобками вокруг них. Вы должны десериализовать его в массив, а затем захватить объект в интересующем индексе.

+0

Я пробовал использовать этот класс. но он не работает :( общественный класс UserType { общественность строки идентификатор {получить, установить;} открытого ключ строки {получить; набор;} публичной строку i18nText {получить, установить;} общественной строку i18nKey {получить; набор;}} –

+0

@SumitChourasia класс выглядит правильно Как вы называете десериализатор Newtonsoft что-то вроде '' JsonConvert.DeserializeObject dasblinkenlight

3

Это связанное сообщение, которое рассматривает разбор JSON в C#: C# JSON Parsing.

Если скобки проблема, просто используйте:

string json = inputJson.Trim().Trim('[',']'); 

Если идентификатор может иметь минимальное значение 1, то это должно работать:

string GetKey(string inputJson) 
{ 
    string key = inputJson.Substring(inputJson.IndexOf("key")+5); 
    key = key.Substring(key.IndexOf("\""), key.IndexOf(",")-key.IndexOf("\"")); 
    key = key.Trim('\"'); 
    return key; 
} 
+0

Я просто хочу, значение ключа, когда значение иД = 1 –

+0

Я редактировал ответ.?. –

+0

Это слишком сложно. :( –

1

[] является определение JSON массив объектов. Ваш вывод должен быть массивом. Траверса через массив как:

for(var i=0; i<output.Length; i++) 
{ 
    if(output[i].id == "1") // desired id 
    { 
     Console.WriteLine(output[i].key);// use it as you wish 
    } 
} 

и использовать найденные объекты key.

+0

Я просто хотел дать вам идею o как вы подходите к проблеме. @ решение ledbutter, конечно, является идеальным;) –

Смежные вопросы