仅使用Value将DataTable转换为JSON

Sub*_*bin 5 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"
            }
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

请帮我解决一下.

Jon*_*dle 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();
}
Run Code Online (Sandbox Code Playgroud)

或者使用 JToken

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"))))))));
Run Code Online (Sandbox Code Playgroud)