使用Json和JavaScriptSerializer反序列化JSON结果

这是我的问题:

我正在尝试将我没有完成的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:
    • hotelObj可用的酒店
    • int totalFound
    • 字符串responseId
    • 字符串searchId
  • hotelObj w / property:
    • 酒店
  • 酒店带有物业:
    • 的ProcessID
    • hotelCode
    • availabilityStatus

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

所以,我使用JsonConvertJavaScriptSerializer尝试了以下内容:

 JavaScriptSerializer ser = new JavaScriptSerializer(); getAvailableHotelResponse availableResponse = ser.Deserialize(json); // Exception: "Type 'com.hotelspro.api.getAvailableHotelResponse' is not supported for deserialization of an array" List items = ser.Deserialize<List>(json); // items.Count = 0 List result = JsonConvert.DeserializeObject<List>(json); // Exception: "Cannot deserialize JSON object into type 'System.Collections.Generic.List`1[com.hotelspro.api.getAvailableHotelResponse]'." getAvailableHotelResponse result2 = JsonConvert.DeserializeObject(json); // Exception: Cannot deserialize JSON array into type 'com.hotelspro.api.hotelObj'. 

为了反序列化这个对象,正确的句子是什么?

谢谢!

根据您的描述很难解释对象的结构,但我能够使用以下最小代码反序化您的示例JSON:

 var result = JsonConvert.DeserializeObject(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; } 

以上列出的对象都没有完全匹配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;} } 

如果hotelarrays不起作用,请尝试使用List代替availableHotels类型。

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