1. ホーム
  2. c#

[解決済み] Json.netによるJSONオブジェクト配列のデシリアライズ

2022-05-18 13:37:34

質問

私は、以下の例のような構造を持つAPIを使おうとしています。

[
   {
      "customer":{
         "first_name":"Test",
         "last_name":"Account",
         "email":"[email protected]",
         "organization":"",
         "reference":null,
         "id":3545134,
         "created_at":"2013-08-06T15:51:15-04:00",
         "updated_at":"2013-08-06T15:51:15-04:00",
         "address":"",
         "address_2":"",
         "city":"",
         "state":"",
         "zip":"",
         "country":"",
         "phone":""
      }
   },
   {
      "customer":{
         "first_name":"Test",
         "last_name":"Account2",
         "email":"[email protected]",
         "organization":"",
         "reference":null,
         "id":3570462,
         "created_at":"2013-08-12T11:54:58-04:00",
         "updated_at":"2013-08-12T11:54:58-04:00",
         "address":"",
         "address_2":"",
         "city":"",
         "state":"",
         "zip":"",
         "country":"",
         "phone":""
      }
   }
]

JSON.netでは、以下のような構成にするとうまくいくでしょう。

{
    "customer": {
        ["field1" : "value", etc...],
        ["field1" : "value", etc...],
    }
}

しかし、私はそれが提供された構造で幸せになるために取得する方法を見つけ出すことができません。

デフォルトのJsonConvert.DeserializeObject(content)を使用すると、正しい数のCustomerが得られますが、すべてのデータがnullになります。

CustomerList (以下) を実行すると、 "Cannot deserialize the current JSON array" という例外が発生します。

public class CustomerList
{
    public List<Customer> customer { get; set; }
}

感想は?

どのように解決するのですか?

JSONをデシリアライズするための新しいモデルを作成することができます。 CustomerJson :

    public class CustomerJson
    {
        [JsonProperty("customer")]
        public Customer Customer { get; set; }
    }

    public class Customer
    {
        [JsonProperty("first_name")]
        public string Firstname { get; set; }

        [JsonProperty("last_name")]
        public string Lastname { get; set; }

        ...
    }

そして、簡単にJSONをデシリアライズすることができます。

JsonConvert.DeserializeObject<List<CustomerJson>>(json);

ドキュメンテーション JSONのシリアライズとデシリアライズ