使用Json&amp ;;反序列化JSON结果JavaScriptSerializer

时间:2011-04-30 01:17:40

标签: c# .net json json.net javascriptserializer

这是我的问题:

我正在尝试将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 / properties:
    • hotelObj availableHotels
    • int totalFound
    • String responseId
    • String searchId
  • hotelObj w / properties:
    • 酒店酒店
  • 酒店带有物业:
    • 的ProcessID
    • hotelCode
    • availabilityStatus
    • ...

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

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

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'.

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

谢谢!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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类型。

P.S。与问题中列出的JSON最接近的对象是getAvailableHotelResponse,但它将availableHotels声明为单hotel个实例,而JSON有一个返回hotel个对象的数组