2017-10-25 31 views
2

したがって、Web APIからJsonオブジェクトを取得するにはHttpClient()を使用します。オブジェクトには、国のすべての州のリストが含まれています。C#複雑なJsonオブジェクトを配列でデシリアライズできない

このコードは、JSONデシリアライズを呼び出します。

rj = JsonConvert.DeserializeObject<RajaOngkirCity>(response); 

応答は、このようなものです:

{ 
    "rajaongkir": { 
     "query": { 
      "key": "xxxxxxxxxxxxxxxxxxxxx" 
     }, 
     "status": { 
      "code": 200, 
      "description": "OK" 
     }, 
     "results": [{ 
       "province_id": "1", 
       "province": "Bali" 
      }, 
      { 
       "province_id": "2", 
       "province": "Bangka Belitung" 
      }, 
     .....] 
    } 
} 

これらは私のクラスである:

public class RajaOngkirState 
{ 
    [JsonProperty("rajaongkir")] 
    public RajaOngkirStateResult RajaOngkir { get; set; } 
} 

public class RajaOngkirStateResult 
{ 
    [JsonProperty("query")] 
    public RajaOngkirStateQuery StateQuery { get; set; } 

    [JsonProperty("status")] 
    public RajaOngkirStateStatus Status { get; set; } 

    [JsonProperty("results")] 
    public RajaOngkirStateResults Results { get; set; } 
} 

public class RajaOngkirStateQuery 
{ 
    [JsonProperty("key")] 
    public string Key { get; set; } 
} 

public class RajaOngkirStateStatus 
{ 
    [JsonProperty("code")] 
    public int Code { get; set; } 
    [JsonProperty("description")] 
    public string Description { get; set; } 
} 

public class RajaOngkirStateResults 
{ 
    public List<RajaOngkirStateList> States { get; set; } 
} 

public class RajaOngkirStateList 
{ 
    [JsonProperty("province_id")] 
    public int ProvinceId { get; set; } 
    [JsonProperty("province")] 
    public string Province { get; set; } 
} 

rajaongkir.resultsが私を引き起こしているようです問題。

  1. は、私は文字列にprovince_idタイプを変更しようとしましたが、それでもエラー:ここ

    は私がしようとしているものです。
  2. List<RajaOngkirStateList> Statesをに変更しようとしましたが、それでもエラーが発生しました。

エラー私は取得しています:

タイプが必要なため、 'ECommerce.ShippingMethod.RajaOngkir.RajaOngkirStateResults' タイプに現在のJSON配列を(例えば、[1,2,3])デシリアライズすることはできませんJSONオブジェクト(たとえば、{"name": "value"})を使用して、正しくデシリアライズします。 このエラーを修正するには、JSONオブジェクトをJSONオブジェクト(例:{"name": "value"})に変更するか、またはデシリアライズされた型をArrayやListなどのコレクションインターフェイス(ICollection、IListなど)を実装する型に変更します。 JSON配列からデシリアライズできます。 JsonArrayAttributeを型に追加して、強制的にJSON配列から逆シリアル化することもできます。 パス「rajaongkir.results」、行1、位置118

答えて

7

は、現在お使いのResultsプロパティは配列を含むオブジェクトであることを主張する - それのためのあなたのJSONはこのように見えたかのように:

"results": { 
    states: [{ 
       "province_id": "1", 
       "province": "Bali" 
      }, 
      { 
       "province_id": "2", 
       "province": "Bangka Belitung" 
      } 
    ]} 

代わりに、JSON resultsプロパティは、リストです。

だから、あなたがする必要があるすべては完全にRajaOngkirStateResultsクラスを削除し、にあなたのResultsプロパティを変更します:

[JsonProperty("results")] 
public List<RajaOngkirStateList> Results { get; set; } 

私は個人的に、それはないリストだことを考えると、ちょうどRajaOngkirStateRajaOngkirStateListの名前を変更したいですそれは別の問題です。

+0

Spot on!なぜ私はそれを見ることができなかったのだろうか。私は改名がうまくいかないことを知っている。ありがとうございました。 –

関連する問題