2011-04-30 86 views
1

这里是我的问题:用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 availableHotels
    • INT totalFound
    • 字符串responseId
    • 字符串搜索ID
  • hotelObj W /属性:
    • 酒店酒店
  • 酒店W /属性:
    • 的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'. 

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

谢谢!

回答

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; 
} 
+0

我在阅读你的回应后我的:)抱歉复制它。但是你没有考虑到......部分酒店匹配,我认为是酒店类型 – Dimitri 2011-04-30 02:19:00

+0

感谢弥敦道!那正是我需要的! – Gonzalo 2011-04-30 03:44:47

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 instace,而JSON有一个hotel对象返回的数组。

+0

谢谢迪米特里!你的回答和Nathan说的正是我所需要的! – Gonzalo 2011-04-30 03:45:40