2016-11-19 39 views
1

因此,請閱讀詳細信息以獲取更多信息。當我嘗試獲取數組項的值時,我在 Method not found: 'System.String System.String.Format(System.IFormatProvider, System.String, System.Object)'.錯誤。如何獲取JSON數組c#項目的值?

陣列是:

{ 
    [ 
     { 
      "GROUP_MOD_ID": "G06", 
      "ADMIN": 1, 
      "USERS": 0 
     } 
    ] 
} 

這是代碼段

dynamic obj_str = JsonConvert.DeserializeObject(obj); 
       string value_admin = obj_str["ADMIN"]; 
       Console.WriteLine(value_admin);  
       if (value_admin == "1") 
        return true; 
       else 
        return false; 

。謝謝大家。 example picture

+0

您發佈的JSON字符串在數組周圍捲曲。這不是有效的JSON語法。輸入字符串(或流)的原始值是什麼? – Dai

+0

親愛的@Dai,'obj'是字符串類型'[{「GROUP_MOD_ID」:「G06」,「ADMIN」:1,「USERS」:0}]' –

+0

@BrianCrist請看我的回答 –

回答

2

在這種情況下我不會用dynamic。我通常建議在C#中避免dynamic。相反,我更喜歡JToken式的方法(在Newtonsoft.Json.Linq命名空間,但是這並不意味着你必須使用LINQ):

JArray array = JArray.Parse(input); 
JObject firstObject = (JObject)array.First; 
String adminValue = (String)firstObject.GetValue("ADMIN"); 

在生產中,你需要添加輸入驗證碼,以確保輸入JSON數組和對象實際上有元素和值,並相應地處理這些錯誤。

但是如果你確信輸入的是正確的,你可以減少這種下降到單行:

String adminValue = (String)(((JObject)JArray.Parse(input)).First.GetValue("ADMIN")); 

...在readbility的成本,當然。

+0

Great ,我會記下這個問題,謝謝。 –

0

,如果你有JSON你的代碼只會工作作爲

VAR OBJ = 「{ 'GROUP_MOD_ID': 'G06', '管理':10, '用戶':0}」;

var obj="[{'GROUP_MOD_ID':'G06','ADMIN':1,'USERS':0}]"; 

    dynamic obj_str = JsonConvert.DeserializeObject(obj); 
      string value_admin = obj_str[0]["ADMIN"]; 
      Console.WriteLine(value_admin); 
+0

親愛的@Dharminder Singh,之後,我曾經使用過這個,但是得到同樣的錯誤'Method not found:'System.String System.String.Format(System.IFormatProvider,System.String,System.Object)'。' –

2

首先你的JSON似乎不正確。

正確的JSON:

[{ 
"GROUP_MOD_ID": "G06", 
"ADMIN": 1, 
"USERS": 0 
}] 

當你desialize此JSON,它會給你一個數組的數組。

您的代碼將是:

dynamic obj_str = JsonConvert.DeserializeObject(json); 
    string value_admin = obj_str[0].ADMIN; 
    Console.WriteLine(value_admin); 
    if (value_admin == "1") 
    { 
    } 
    else 
    { 
    } 

你可以通過這樣的方式來看到這一點。

public class SampleClass 
{ 
    public string GROUP_MOD_ID { get; set; } 
    public int ADMIN { get; set; } 
    public int USERS { get; set; } 
} 

代碼反序列化:

SampleClass[] obj_str = JsonConvert.DeserializeObject<SampleClass[]>(json); 
    int value_admin = obj_str[0].ADMIN; 
    Console.WriteLine(value_admin); 
    if (value_admin == 1) 
    { 
    } 
    else 
    { 
    } 
+0

是的,根據上述,我有工作,但我已經創建了一個新班。謝謝。 –

+0

沒問題,歡迎你。 –

0

嗨首先你做模型反序列化對象。

您的模型是這樣的。

public class Test_Model 
{ 
    [JsonProperty("GROUP_MOD_ID")] 
    public string GROUP_MOD_ID { get; set; } 
    [JsonProperty("ADMIN")] 
    public int ADMIN { get; set; } 
    [JsonProperty("USERS")] 
    public int USERS { get; set; } 
} 

和寫這個代碼後:

 var obj_str = JsonConvert.DeserializeObject<Test_Model>(obj); 
     int value_admin = obj_str.ADMIN; 
     Console.WriteLine(value_admin); 
     if (value_admin == 1) 
      return true; 
     else return false; 

我希望如此,你的問題進行梳理。

+0

所以,正如戴的話所說的,感謝主席,這對我很有用。 –