在ASP.Net MVC中将JSON转换为C#类

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相匹配的类.

谢谢,马克

btl*_*log 1

使用 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 序列化器来完成此操作,但您需要做额外的工作。