2016-11-19 77 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

所以,正如戴的话所说的,感谢主席,这对我很有用。 –

相关问题