仅使用Value将DataTable转换为JSON

时间:2015-07-22 05:45:33

标签: c# json

如果我有以下结构中的数据表。

HostelName      FloorName   FlatName    Occupied    Vacant
Building One    Floor A         A           2          2
Building One    Floor A         B           0          4
Building One    Floor A         C           0          4
Building One    Floor A         D           0          4
Building One    Floor A         E           0          4
Building One    Floor B         F           0          4
Building One    Floor B         G           0          4
Building One    Floor B         H           0          4
Building One    Floor B         I           0          4
Building One    Floor B         J           0          4

我想将它序列化为一个JSON对象,其中HostelName,FloorName& FlatName列是JSON对象中的节点,如:

{
    "Building One": {
        "Floor A": {
            "A": {
                "Occupied": "2",
                "Vacant": "2"
            },
            "B": {
                "Occupied": "0",
                "Vacant": "4"
            },
            "C": {
                "Occupied": "0",
                "Vacant": "4"
            },
            "D": {
                "Occupied": "0",
                "Vacant": "4"
            },
            "E": {
                "Occupied": "0",
                "Vacant": "4"
            }
        },
        "Floor B": {
            "F": {
                "Occupied": "0",
                "Vacant": "4"
            },
            "G": {
                "Occupied": "0",
                "Vacant": "4"
            },
            "H": {
                "Occupied": "0",
                "Vacant": "4"
            },
            "D": {
                "Occupied": "0",
                "Vacant": "4"
            },
            "I": {
                "Occupied": "0",
                "Vacant": "4"
            }
        }
    }
};

请帮我解决。

2 个答案:

答案 0 :(得分:1)

您所要做的就是使用自定义JSONConverter(如果使用JSON.NET),请了解here (JSON.NET Implementing Custom Serialization)

答案 1 :(得分:0)

除非每层楼的房间数量有限,否则我会把房间排成一排。地板也一样。如果你以后要解析它会更有意义,并且更容易使用。

要编写自定义JSON,您可以使用JSON.net的JsonWriter。然后你就可以这样写:

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);

using (JsonWriter writer = new JsonTextWriter(sw))
{
    writer.Formatting = Formatting.Indented;
    writer.WriteStartObject();
    writer.WritePropertyName("Building One");
    writer.WriteStartObject();
    writer.WritePropertyName("Floor A");
    writer.WriteStartObject();
    writer.WritePropertyName("A");
    writer.WriteStartObject();
    writer.WritePropertyName("Occupied");
    writer.WriteValue("2");
    writer.WritePropertyName("Vacant");
    writer.WriteValue("2");
    writer.WriteEnd();
    writer.WritePropertyName("B");
    writer.WriteStartObject();
    writer.WritePropertyName("Occupied");
    writer.WriteValue("0");
    writer.WritePropertyName("Vacant");
    writer.WriteValue("4");
    writer.WriteEnd();
    writer.WriteEndObject();
}

或使用JTokens

JObject o = new JObject(
    new JProperty("Building One",
        new JObject(
            new JProperty("Floor A",
                new JObject(
                    new JProperty("A",
                        new JObject(
                            new JProperty("Occupied", "2"),
                            new JProperty("Vacant", "2"))),
                    new JProperty("B",
                        new JObject(
                            new JProperty("Occupied", "0"),
                            new JProperty("Vacant", "4"))))))));