C# 使用JSON反序列化JSON结果&;JavaScriptSerializer

C# 使用JSON反序列化JSON结果&;JavaScriptSerializer,c#,.net,json,json.net,javascriptserializer,C#,.net,Json,Json.net,Javascriptserializer,我的问题是: 我正在尝试反序列化我没有完成的json。json的格式如下所示: {"responseId":1200, "availableHotels":[ {"processId":"HA-84665605","hotelCode":"UKKTLT","availabilityStatus":"InstantConfirmation",...}, {"processId":"HA-28600965","hotelCode":"UKKTLT","availabilityStat

我的问题是:

我正在尝试反序列化我没有完成的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可用酒店
    • 找到整数
    • 字符串响应ID
    • 字符串搜索ID
  • hotelObj w/酒店:
    • 酒店
  • 酒店及物业:
    • 进程ID
    • 酒店代码
    • 可用性状态
因此,通过查看json,我知道它包含getAvailableHotelResponse对象的信息

因此,我使用
jsonvert
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'.
JavaScriptSerializer ser=newJavaScriptSerializer();
getAvailableHotelResponse availableResponse=ser.Deserialize(json);
//异常:“反序列化数组时不支持类型'com.hotelspro.api.getAvailableHotelResponse'”
列表项=序列反序列化(json);
//项目数=0
列表结果=JsonConvert.DeserializeObject(json);
//异常:“无法将JSON对象反序列化为类型‘System.Collections.Generic.List`1[com.hotelspro.api.getAvailableHotelResponse]”
getAvailableHotelResponse result2=JsonConvert.DeserializeObject(json);
//异常:无法将JSON数组反序列化为“com.hotelspro.api.hotelObj”类型。
反序列化这个对象的正确句子是什么


谢谢

很难根据您的描述解释对象的结构,但我能够使用以下最少的代码反序列化您的示例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;
}
var result=JsonConvert.DeserializeObject(json);
公共类getAvailableHotelResponse
{
公共信息系统;
公共可用酒店[]可用酒店;
发现公共信息;
公共字符串搜索ID;
}
公共级酒店
{
公共字符串processId;
公共字符串酒店代码;
公共字符串可用性状态;
}

根据您的描述很难解释对象的结构,但我能够使用以下最少的代码反序列化您的示例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;
}
var result=JsonConvert.DeserializeObject(json);
公共类getAvailableHotelResponse
{
公共信息系统;
公共可用酒店[]可用酒店;
发现公共信息;
公共字符串搜索ID;
}
公共级酒店
{
公共字符串processId;
公共字符串酒店代码;
公共字符串可用性状态;
}

上面列出的两个对象都不完全匹配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;}
}
如果
酒店
数组不起作用,请尝试使用
列表
代替
可用酒店
类型


另外,问题中列出的与JSON最接近的对象是
getAvailableHotelResponse
,但它将
availableHotels
声明为single
hotel
Instance,而JSON返回了一系列
hotel
对象。

上述两个对象都不完全匹配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;}
}
如果
酒店
数组不起作用,请尝试使用
列表
代替
可用酒店
类型


另外,与您问题中列出的JSON最接近的对象是
getAvailableHotelResponse
,但它将
availableHotels
声明为single
hotel
Instance,而JSON返回了一系列
hotel
对象。

我在发布我的回复后阅读了您的回复:)抱歉重复了。但是你没有考虑到。。。酒店比赛的一部分,我认为是酒店类型谢谢内森!这正是我所需要的!我在发布我的回复后看到了你的回复:)很抱歉重复了。但是你没有考虑到。。。酒店比赛的一部分,我认为是酒店类型谢谢内森!这正是我所需要的!谢谢迪米特里!你的回答和内森说的正是我需要的!谢谢迪米特里!你的回答和内森说的正是我需要的!