Mar*_*ark 5 c# asp.net-mvc json asp.net-mvc-3
我正在尝试编写一个API - 其网站上显示的预期输出(针对第三方)是下面的JSON:
{
"api_version" : 4 ,
"hotel_ids" : [97497],
"hotels" :
[
{
"hotel_id": 97497,
"room_types":
{
"Fenway Room":
{
"url": "someurlhere",
"price": 178.50,
"room_code": "SINGLE"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用在线工具:http://json2csharp.com/
它给了我以下课程:
public class FenwayRoom
{
public string url { get; set; }
public double price { get; set; }
public string room_code { get; set; }
}
public class RoomTypes
{
public FenwayRoom __invalid_name__Fenway Room { get; set; }
}
public class Hotel
{
public int hotel_id { get; set; }
public RoomTypes room_types { get; set; }
}
public class RootObject
{
public int api_version { get; set; }
public List<int> hotel_ids { get; set; }
public List<Hotel> hotels { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您可以在RoomTypes中看到:
FenwayRoom __invalid_name__Fenway Room { get; set; }
我想知道他们的JSON规范是否错误,或者我有没有办法创建类来返回他们期望的JSON?
在这个例子中,我认为房间类型"Fenway Room"是一个变量 - 所以我不认为它也可以是一个类名.但可能只是因为我不知道如何创建这样的类.
我只是无法弄清楚"芬威室" - 我认为它需要有类似的东西:"房间名称":"芬威室" - 但也许还有另一种定义类的方法,因此它不需要标签"房间名称".
我非常感谢您确认是否可以创建与JSON相匹配的类.
谢谢,马克
使用 Json.NET 时的输出
"room_types":
{
"Fenway Room":
{
"url": "someurlhere",
"price": 178.50,
"room_code": "SINGLE"
}
}
}
Run Code Online (Sandbox Code Playgroud)
看看序列化字典会得到什么。
将您的班级更改为
public class Room
{
public string url { get; set; }
public double price { get; set; }
public string room_code { get; set; }
}
public class Hotel
{
public int hotel_id { get; set; }
public Dictionary<string, Room> room_types { get; set; }
}
public class RootObject
{
public int api_version { get; set; }
public List<int> hotel_ids { get; set; }
public List<Hotel> hotels { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这一切都基于使用 Json.NET,它免费为您提供这种格式的字典的序列化/反序列化。您可以使用 .NET Framework 序列化器来完成此操作,但您需要做额外的工作。