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 带属性:
    • 酒店对象可用酒店
    • int totalFound
    • 字符串响应 ID
    • 字符串 searchId
  • 带属性的hotelObj:
    • 酒店酒店
  • 酒店带属性:
    • 进程 ID
    • 酒店代码
    • 可用性状态
    • ...

因此,我知道从 json 中可以看出它包含 getAvailableHotelResponse 对象的信息。

所以,我尝试了以下使用JsonConvertand 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>使用availableHotelstype。

PS您问题中列出的最接近JSON的对象是,getAvailableHotelResponse但它声明availableHotels为单个hotel实例,而不是JSON返回了一个对象数组hotel

于 2011-04-30T02:09:00.480 回答