2015-07-22 7 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

Попробуйте создать JSON с помощью 'StringBuilder'. –

+0

Можете ли вы рассказать нам, что вы пробовали до сих пор? –

+0

Вам удалось запросить данные из таблицы, по крайней мере? с чем вы столкнулись? – greenfeet

ответ

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")))))))); 
Смежные вопросы