从json模板设计c#类

时间:2014-03-25 15:24:15

标签: c# json asp.net-web-api .net-4.5

我必须根据收到的json模板设计一个类。我被困在json的这一部分:

events: {
    "door": [
        5,
        {
            valueone: 27,
            valuetwo: "something"
        }
    ],
    "window": [
        2,
        {
            valueone: 13,
            valuetwo: "something"
        }
    ]
}

我能想到的最好的是根对象中的这个属性:

public Dictionary<string, EventData> Events { get; set; }

事件定义如下:

public class EventData
{
    public int valueone { get; set; }
    public string valuetwo { get; set; }
}

这给了我以下输出:

Events: {
    door: {
        valueone: 27,
        valuetwo: "something"
    }
}

但我不知道如何设计类来获取输出中json示例(5和2)中的数字。我今天试图谷歌这个很长一段时间,但我不太清楚要搜索什么。

2 个答案:

答案 0 :(得分:0)

以下是适合的代码大纲:

public class Event
{
    public List<Elements> door { get; set; }
    public List<Elements> window { get; set; }
}

public sealed class Elements
{
    public int Id {get; set;}
    public IDictionary<string, string> Values { get; set;}
}

您可以使用C#构建对象,然后使用JSON.Net将它们序列化为JSON对应物,使用:

Newtonsoft.Json.JsonConvert.SerializeObject(YOUR-OBJECT-HERE)

答案 1 :(得分:0)

根据您的需要,您不一定要像这样定义捕获json的类型:

对于解析,您可以使用dynamic来捕获json,这是由一些json libararies解析的。

为了序列化json,你可以定义像这样的匿名对象

Json.Stringify(new {
    events = new {
        door = new[] {
            5,
            new { ... }
        }
    }
});

如果您 需要定义显式类型(因为您需要在c#程序中使用模型),您可能希望更清楚地了解您要建模的域。您可以使用不同的C#结构镜像相同的JSON,因此这里真正重要的是业务/需求的作用或外观。

正如@Habib在评论中指出的那样,你可以使用json2csharp.com给你一个提示(我直到现在才知道这项服务 - 看起来很有趣!),但是json2csharp.com将无法回答这些问题。的问题。

注意:你问题中的“json”是无效的JSON。