如何修复json到c#类的转换?

如何修复json到c#类的转换?,c#,json,C#,Json,我试图从json生成类以反序列化为c#对象,但list对象不正确,我哪里出错了?根据我的假设,可用房间应该是一个列表,但它不起作用 下面是我的JSON { "avaliabilitiesResponse": { "Hotels": { "Hotel": [ { "HotelCode": "0017855", "HotelsName": "Hilton Jeddah", "Location": "J

我试图从json生成类以反序列化为c#对象,但list对象不正确,我哪里出错了?根据我的假设,可用房间应该是一个列表,但它不起作用

下面是我的JSON

{
  "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"
            }
          ]
        }
      ]
    }
  }
}