2016-11-19 8 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を避けることをお勧めします。 (それはあなたがLINQのを使用する必要が意味するものではありませんが、Newtonsoft.Json.Linq名前空間に)代わりに私がJTokenスタイルのアプローチを好む:生産で

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

私はこの問題に注意します。ありがとうございます。 –

0

あなたのコードは、あなたが

VARとしてJSONを持っているOBJ = "{ 'GROUP_MOD_ID': 'G06'、 'ADMIN':10 'USERS':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

親愛なる@Dhminmin Singh、後で、私はこれを使っていましたが、同じエラー 'メソッドが見つかりませんでした: 'System.String System.String.Format(System.IFormatProvider、System.String、System.Object)'。 ' –

2

まず、あなたのJSONは間違っているようです。

正しいJSON:

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

そして、あなたは、このJSONをdesializeとき、それはあなたの配列の配列を与えます。

あなたのコードは次のようになります。

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

だからダイ氏の言うとおり、それは私のために働いています。 –

関連する問題