2015-07-22 49 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"))))))));