2013-11-15 58 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" 
} 
] 

我只想鍵的值時,ID = 1的值。通常json以{}(大括號)開頭,但在這裏它就像[](方括號)。我見過很多例子,但都沒有爲我工作。

+0

可能重複http://stackoverflow.com/questions/18192357/deserializing-json-object-array-with-json-淨) – 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"]; 
} 
[與Json.net反序列化JSON對象陣列(的
+0

工作也很簡單。 :) 謝謝 –

3

一般json以{}(大括號)開頭,但這裏它就像[](方括號)。

這是因爲你有一個對象數組,而不是單個對象。數組與他們周圍的方括號序列化。您應該將其反序列化爲一個數組,然後在感興趣的索引處抓取該對象。

+0

我試過使用這個類。但它不工作:( 公共類USERTYPE { 公共字符串ID {獲得;設置;} 公共字符串鍵{獲得;設置;} 公共字符串i18nText {獲取;集;} 公共字符串i18nKey {獲得;設置;} } –

+0

@SumitChourasia類向右看你怎麼叫Newtonsoft的解串器,比如'JsonConvert.DeserializeObject 東西' – dasblinkenlight

3

這是一個解決C#中的JSON解析的相關文章:C# JSON Parsing

如果括號內是一個問題,只需使用:

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

如果ID可具有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

我只想鍵的值時,ID = 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的解決方案當然是理想的解決方案;) –