如何修复json到c#类的转换?
我试图从json生成类以反序列化为c#对象,但list对象不正确,我哪里出错了?根据我的假设,可用房间应该是一个列表,但它不起作用 下面是我的JSON如何修复json到c#类的转换?,c#,json,C#,Json,我试图从json生成类以反序列化为c#对象,但list对象不正确,我哪里出错了?根据我的假设,可用房间应该是一个列表,但它不起作用 下面是我的JSON { "avaliabilitiesResponse": { "Hotels": { "Hotel": [ { "HotelCode": "0017855", "HotelsName": "Hilton Jeddah", "Location": "J
{
"avaliabilitiesResponse": {
"Hotels": {
"Hotel": [
{
"HotelCode": "0017855",
"HotelsName": "Hilton Jeddah",
"Location": "Jeddah, Saudi Arabia",
"Rating": "4",
"LowestPrice": "35",
"Currency": "EUR",
"IsReady": "true",
"AvailableRooms": {
"AvailableRoom": [
{
"RoomCode": "11245",
"RoomName": "Standard",
"Occupancy": "1",
"Status": "true"
},
{
"RoomCode": "12000",
"RoomName": "Double",
"Occupancy": "2",
"Status": "true"
},
{
"RoomCode": "99685",
"RoomName": "Twin",
"Occupancy": "2",
"Status": "true"
}
]
}
},
{
"HotelCode": "0018799",
"HotelsName": "Ramada Continental Jeddah",
"Location": "Jeddah, Saudi Arabia",
"Rating": "3",
"LowestPrice": "345",
"Currency": "USD",
"IsReady": "false",
"AvailableRooms": {
"AvailableRoom": [
{
"RoomCode": "00012",
"RoomName": "Triple Standard",
"Occupancy": "3",
"Status": "false"
},
{
"RoomCode": "5477",
"RoomName": "Triple Sea View",
"Occupancy": "3",
"Status": "false"
},
{
"RoomCode": "996666",
"RoomName": "Standard Double",
"Occupancy": "2",
"Status": "true"
}
]
}
},
{
"HotelCode": "0010888",
"HotelsName": "Qasr Al Sharq",
"Location": "Jeddah, Saudi Arabia",
"Rating": "5",
"LowestPrice": "3500",
"Currency": "SAR",
"IsReady": "true",
"AvailableRooms": {
"AvailableRoom": {
"RoomCode": "102432",
"RoomName": "Suite",
"Occupancy": "4",
"Price": "3500",
"Status": "true"
}
}
}
]
}
}
}
它会像这样转换成c
public class AvailableRooms
{
public object AvailableRoom { get; set; } //this is not correct i assume, i tried to fix it like Hotels have Hotel in Json to have a list here but it does not work.
}
public class Hotel
{
public string HotelCode { get; set; }
public string HotelsName { get; set; }
public string Location { get; set; }
public string Rating { get; set; }
public string LowestPrice { get; set; }
public string Currency { get; set; }
public string IsReady { get; set; }
public AvailableRooms AvailableRooms { get; set; }
}
public class Hotels
{
public List<Hotel> Hotel { get; set; }
}
public class AvaliabilitiesResponse
{
public Hotels Hotels { get; set; }
}
public class RootObject
{
public AvaliabilitiesResponse avaliabilitiesResponse { get; set; }
}
公共类可用eRoom
{
public object availableeRoom{get;set;}//我想这是不对的,我试图修复它,就像Hotels在Json中有Hotel一样,在这里有一个列表,但它不起作用。
}
公务舱酒店
{
公共字符串HotelCode{get;set;}
公共字符串HotelsName{get;set;}
公共字符串位置{get;set;}
公共字符串评级{get;set;}
公共字符串最低价格{get;set;}
公共字符串货币{get;set;}
公共字符串为ready{get;set;}
公共可用eRoom可用eRoom{get;set;}
}
公共级酒店
{
公共列表酒店{get;set;}
}
公共类可用性响应
{
公共旅馆{get;set;}
}
公共类根对象
{
公共AvailabilitiesResponse AvailabilitiesResponse{get;set;}
}
我已尝试使用Json2csharp以及visual studio的“粘贴特殊”选项进行类转换,但我的对象中仍然没有可用的空间。替换此选项:
public class AvailableRooms
{
public object AvailableRoom { get; set; }
}
作者:
注意:由于某些原因,所有文件室字段都是字符串。我希望在某些地方有
int
和bool
。问题在于JSON对象
"AvailableRooms": {
"AvailableRoom": [
{
"RoomCode": "11245",
"RoomName": "Standard",
"Occupancy": "1",
"Status": "true"
},
{
"RoomCode": "12000",
"RoomName": "Double",
"Occupancy": "2",
"Status": "true"
},
{
"RoomCode": "99685",
"RoomName": "Twin",
"Occupancy": "2",
"Status": "true"
}
]
}
AvailableRoom
是此处的一个对象,它有一个名为AvailableRoom
的属性,该属性是一个数组。尝试从json对象中删除availableeRoom
属性,并将数组值保留在availableeRoom
下
如果您在Hotel
阵列中看到最后一个对象
"AvailableRooms": {
"AvailableRoom": { // This is an array in the first 2 Hotel objects, but an object here.
"RoomCode": "102432",
"RoomName": "Suite",
"Occupancy": "4",
"Price": "3500",
"Status": "true"
}
}
这里是固定的json(问题是最后一个可用eRoom
,它有一个无效的成员可用eRoom
,该成员既是数组又是对象)。可以使用visual studio将此JSON粘贴为类:
{
"avaliabilitiesResponse": {
"Hotels": {
"Hotel": [
{
"HotelCode": "0017855",
"HotelsName": "Hilton Jeddah",
"Location": "Jeddah, Saudi Arabia",
"Rating": "4",
"LowestPrice": "35",
"Currency": "EUR",
"IsReady": "true",
"AvailableRooms":
[
{
"RoomCode": "11245",
"RoomName": "Standard",
"Occupancy": "1",
"Status": "true"
},
{
"RoomCode": "12000",
"RoomName": "Double",
"Occupancy": "2",
"Status": "true"
},
{
"RoomCode": "99685",
"RoomName": "Twin",
"Occupancy": "2",
"Status": "true"
}
]
}
,
{
"HotelCode": "0018799",
"HotelsName": "Ramada Continental Jeddah",
"Location": "Jeddah, Saudi Arabia",
"Rating": "3",
"LowestPrice": "345",
"Currency": "USD",
"IsReady": "false",
"AvailableRooms" :
[
{
"RoomCode": "00012",
"RoomName": "Triple Standard",
"Occupancy": "3",
"Status": "false"
},
{
"RoomCode": "5477",
"RoomName": "Triple Sea View",
"Occupancy": "3",
"Status": "false"
},
{
"RoomCode": "996666",
"RoomName": "Standard Double",
"Occupancy": "2",
"Status": "true"
}
]
},
{
"HotelCode": "0010888",
"HotelsName": "Qasr Al Sharq",
"Location": "Jeddah, Saudi Arabia",
"Rating": "5",
"LowestPrice": "3500",
"Currency": "SAR",
"IsReady": "true",
"AvailableRooms": [
{
"RoomCode": "102432",
"RoomName": "Suite",
"Occupancy": "4",
"Price": "3500",
"Status": "true"
}
]
}
]
}
}
}
您还应在c#我看不到房间的可用对象中发布错误。没有错误,但我没有看到针对hotels的房间列表。您的json错误,hotels应该是数组而不是对象,hotels应该是hotels arrayNewtonsoft.json.JsonSerializationException的每个对象:“无法将当前json对象(例如,{“name”:“value”})反序列化为类型”模型。房间[]“Path”AvailabilitiesResponse.Hotels.Hotel[2]。AvailableRoom.AvailableRoom.RoomCode,第77行,位置25。“对不起,我不熟悉JSON反序列化。对不起。根据您发布的JSON,
AvailableRoom
是一个数组。在错误中,我看不出这一点。您能否在实际的JSON中显示第77行中的内容?第77行“RoomCode”:“102432”,如果您看到其他可用的eRoom,则该部分无效。这些都是数组。如果可以修复序列化,为什么要删除该属性?因为这些属性都位于其他位置,并且根据可用的命名,OMS应该是数组。没关系,我遇到了您指出的问题。当我读到它的时候,它只是不清楚。看看那个答案被接受的人,那正是我想说的。但这里的人们希望通过复制/粘贴得到答案而不是理解问题。从我的观点来看,你应该清楚只有最后一个对象是错的。其他人都很好。这就是代码(和代码生成)失败的原因。
{
"avaliabilitiesResponse": {
"Hotels": {
"Hotel": [
{
"HotelCode": "0017855",
"HotelsName": "Hilton Jeddah",
"Location": "Jeddah, Saudi Arabia",
"Rating": "4",
"LowestPrice": "35",
"Currency": "EUR",
"IsReady": "true",
"AvailableRooms":
[
{
"RoomCode": "11245",
"RoomName": "Standard",
"Occupancy": "1",
"Status": "true"
},
{
"RoomCode": "12000",
"RoomName": "Double",
"Occupancy": "2",
"Status": "true"
},
{
"RoomCode": "99685",
"RoomName": "Twin",
"Occupancy": "2",
"Status": "true"
}
]
}
,
{
"HotelCode": "0018799",
"HotelsName": "Ramada Continental Jeddah",
"Location": "Jeddah, Saudi Arabia",
"Rating": "3",
"LowestPrice": "345",
"Currency": "USD",
"IsReady": "false",
"AvailableRooms" :
[
{
"RoomCode": "00012",
"RoomName": "Triple Standard",
"Occupancy": "3",
"Status": "false"
},
{
"RoomCode": "5477",
"RoomName": "Triple Sea View",
"Occupancy": "3",
"Status": "false"
},
{
"RoomCode": "996666",
"RoomName": "Standard Double",
"Occupancy": "2",
"Status": "true"
}
]
},
{
"HotelCode": "0010888",
"HotelsName": "Qasr Al Sharq",
"Location": "Jeddah, Saudi Arabia",
"Rating": "5",
"LowestPrice": "3500",
"Currency": "SAR",
"IsReady": "true",
"AvailableRooms": [
{
"RoomCode": "102432",
"RoomName": "Suite",
"Occupancy": "4",
"Price": "3500",
"Status": "true"
}
]
}
]
}
}
}