1

これが私の問題です:

私が行っていないjsonを逆シリアル化しようとしています。jsonの形式は次のとおりです。

{"responseId":1200,
"availableHotels":[
    {"processId":"HA-84665605","hotelCode":"UKKTLT","availabilityStatus":"InstantConfirmation",...},
    {"processId":"HA-28600965","hotelCode":"UKKTLT","availabilityStatus":"InstantConfirmation",...},
    {"processId":"HI-63991185","hotelCode":"UKJOVF","availabilityStatus":"InstantConfirmation",...}
],
"totalFound":9,
"searchId":"TP-84026455"}

そして、次のクラス:

  • getAvailableHotelResponse w /プロパティ:
    • hotelObj利用可能なホテル
    • int totalFound
    • 文字列responseId
    • 文字列searchId
  • hotelObj w /プロパティ:
    • ホテルホテル
  • プロパティ付きホテル:
    • processId
    • hotelCode
    • 可用性ステータス
    • ..。

したがって、jsonを見てわかることは、getAvailableHotelResponseオブジェクトの情報が含まれていることです。

JsonConvertだから、私はとを使って次のことを試しましたJavaScriptSerializer

JavaScriptSerializer ser = new JavaScriptSerializer();
getAvailableHotelResponse availableResponse = ser.Deserialize<getAvailableHotelResponse>(json);
// Exception: "Type 'com.hotelspro.api.getAvailableHotelResponse' is not supported for deserialization of an array"

List<getAvailableHotelResponse> items = ser.Deserialize<List<getAvailableHotelResponse>>(json);
// items.Count = 0

List<getAvailableHotelResponse> result = JsonConvert.DeserializeObject<List<getAvailableHotelResponse>>(json);
// Exception: "Cannot deserialize JSON object into type 'System.Collections.Generic.List`1[com.hotelspro.api.getAvailableHotelResponse]'."

getAvailableHotelResponse result2 = JsonConvert.DeserializeObject<getAvailableHotelResponse>(json);
// Exception: Cannot deserialize JSON array into type 'com.hotelspro.api.hotelObj'.

このオブジェクトを逆シリアル化するための正しい文は何ですか?

ありがとう!

4

2 に答える 2

1

説明に基づいてオブジェクトの構造を解釈することは困難ですが、次の最小限のコードを使用してサンプル JSON を逆シリアル化することができました。

var result = JsonConvert.DeserializeObject<getAvailableHotelResponse>(json);

public class getAvailableHotelResponse
{
    public int responseId;
    public availableHotel[] availableHotels;
    public int totalFound;
    public string searchId;
}

public class availableHotel
{
    public string processId;
    public string hotelCode;
    public string availabilityStatus;
}
于 2011-04-30T01:44:34.770 に答える
0

上記のオブジェクトはいずれも JSON スキーマと完全には一致しません... オブジェクトを JSON にシリアル化した人は誰でも、逆シリアル化しようとしているクラスのいずれかを使用しましたか? そうでない場合は、JSON を逆シリアル化するクラスを作成します。

public class HotelSearchResponse
{
    public int responseID {get;set;}
    public hotel[] availableHotels {get;set;}
    public int totalFound {get;set;}
    public string searchId {get;set;}
}

hotel配列が機能しない場合は、List<hotel>代わりにavailableHotels型を試してください。

PS質問にリストされているものからJSONに最も近いオブジェクトは、単一のインスタンスとしてgetAvailableHotelResponse宣言されていますが、代わりにJSONにはオブジェクトの配列が返されます。availableHotelshotelhotel

于 2011-04-30T02:09:00.480 に答える