web-dev-qa-db-ja.com

Newtonsoft.Jsonを使用してJSON配列をデシリアライズする方法

[
   {
      "receiver_tax_id":"1002",
      "total":"6949,15",
      "receiver_company_name":"Das Company",
      "receiver_email":"[email protected]",
      "status":0
   },
   {
      "receiver_tax_id":"1001",
      "total":"39222,49",
      "receiver_company_name":"SAD company",
      "receiver_email":"[email protected]",
      "status":1
   }
]

こんにちは、これは私のJsonデータですが、デシリアライズできません。 「ステータス」値のみを確認したい。 (最初のオブジェクト「ステータス」0、2番目のオブジェクト「ステータス」1)。

定義の例:

public class Example 
{
    [JsonProperty("receiver_tax_id")] 
    public string receiver_tax_id { get; set; }
    [JsonProperty("total")] 
    public string total { get; set; }
    [JsonProperty("receiver_company_name")] 
    public string receiver_company_name { get; set; }
    [JsonProperty("receiver_email")] 
    public string receiver_email { get; set; }
    [JsonProperty("status")] 
    public int status { get; set; } 
}

逆シリアル化コード:

var des = (Example)JsonConvert.DeserializeObject(responseString, typeof(Example)); 
Console.WriteLine(des.status[0].ToString());
20
Steven

このコードを試してください:

public class Receiver 
{
   public string receiver_tax_id { get; set;}
   public string total { get; set;}
   public string receiver_company_name { get; set;}
   public int status { get; set;}
}

そして、デシリアライズは次のようになります。

var result = JsonConvert.DeserializeObject<List<Receiver>>(responseString);
var status = result[0].status;
32
Maxim Goncharuk

statusのみを確認する場合は、dynamicタイプの.NETを使用できます( https://msdn.Microsoft.com/en-us/library/dd264741.aspx

dynamic deserialized = JObject.Parse(responseString); 
int status1 = deserialized[0].status; 
int status2 = deserialized[1].status; 
//
// do whatever

この方法では、Exampleクラスさえ必要ありません。

3
Dan Dinu

あなたのコードとJSONサンプルから、問題はあなたが実際に単一のExampleではなくList<Example>をデシリアライズしていることのようです。

私は2つのことをします:

  1. 適切なJsonProperty属性のプレフィックスを既に付けているため、クラスを.NET命名規則に準拠させます。

    public class Example 
    {
        [JsonProperty("receiver_tax_id")] 
        public string ReceiverTaxId { get; set; }
    
        [JsonProperty("total")] 
        public string Total { get; set; }
    
        [JsonProperty("receiver_company_name")] 
        public string ReceiverCompanyName { get; set; }
    
        [JsonProperty("receiver_email")] 
        public string ReceiverEmail { get; set; }
    
        [JsonProperty("status")] 
        public int Status{ get; set; } 
    }
    
  2. 現在使用している非ジェネリックバージョンではなく、ジェネリックList<Example>オーバーロードを使用して、JsonConvert.DeserializeObject<T>を逆シリアル化します。

    var des = JsonConvert.DeserializeObject<List<Example>>(responseString); 
    Console.WriteLine(des[0].Status);
    
1
Yuval Itzchakov

配列をExampleオブジェクトにデシリアライズしようとしています。代わりにリストにそれをやってみてください:

var des = JsonConvert.DeserializeObject(responseString, typeof(List<Example>)) as List<Example>;
0
Vi100