2015-07-22 47 views
5

如果我有以下结构的DataTable。转换数据表到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" 
      } 
     } 
    } 
}; 

请帮我解决这个问题。

+0

尝试使用'StringBuilder'生成JSON。 –

+0

你能告诉我们你到目前为止做了什么? –

+0

您是否设法至少查询表中的数据?你有什么麻烦? – greenfeet

回答

0

除非有每个楼层的客房数量是有限的,我会使房间的数组。地板也一样。更有意义,如果稍后要解析它,则更容易处理。

要写出你可以使用JSON.net的JsonWriter定制JSON。然后,你可以写这样的:

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"))))))));