2016-11-11 2 views
-2

У меня есть следующий JSON, и я хочу десериализовать использование класса. Я прочитал несколько ссылок, но в этом случае он не работает.Как преобразовать JSON в C# с помощью иерархии классов?

Я хочу создать класс, который может десериализовать следующий JSON и работать нормально. Может ли кто-нибудь предложить мне?

JSON:

{ 
    "panels":{ 
     "LBL_EDITVIEW_PANEL1":{ 
     "lable_value":"New Panel 1", 
     "rows":[ 
      [ 
       { 
        "name":"subject", 
        "label_value":"Subject", 
        "label":"subject", 
        "type":"String", 
        "required":"true", 
        "CanBeSecuredForCreate":"false", 
        "CanBeSecuredForRead":"false", 
        "CanBeSecuredForUpdate":"false" 
       }, 
       { 
        "name":"scheduledstart", 
        "label_value":"Start Time", 
        "label":"scheduledstart", 
        "type":"DateTime", 
        "required":"true", 
        "CanBeSecuredForCreate":"false", 
        "CanBeSecuredForRead":"false", 
        "CanBeSecuredForUpdate":"false" 
       } 
      ] 
     ] 
     } 
    } 
} 

Если есть 3 панели, выше JSON имеет LBL_EDITVIEW_PANEL1, LBL_EDITVIEW_PANEL2, LBL_EDITVIEW_PANEL3. Это действительно осложняет ситуацию.

Я спрашиваю, как это сделать программно.

+1

Возможный дубликат [десериализации JSON с C#] (http://stackoverflow.com/questions/7895105/deserialize-json-with-c-sharp) – Liam

ответ

0

Там есть вариант в Visual Studio:

  • Правка> Специальная вставка> Вставить JSON в качестве классов
+0

Это не сериализации – Liam

+0

«Я хочу создать класс, который может десериализацию после JSON и работать нормально " – Miguel

+0

@Haksu Я прошу программно. –

1

Так что в вашем JSON, в "панели" объект будет иметь 0 до п " LBL_EDITVIEW_PANEL {number} ", где n неограничен. Это означает, что объект панелей ведет себя как хэш-таблица.

Это должно сработать. IDictionary ключи будут сериализованы в существенно динамические свойства в вашем JSON.

public class Rootobject 
{ 
    public System.Collections.Generic.IDictionary<string, panel> panels { get; set; } 
} 

public class panel 
{ 
    public string label_value { get; set; } 
    public row[] rows { get; set } 
} 

public class row 
{ 
    public string name { get; set; } 
    public string label_value { get; set; } 
    public string label { get; set; } 
    public string type { get; set; } 
    public string required { get; set; } 
    public string CanBeSecuredForCreate { get; set; } 
    public string CanBeSecuredForRead { get; set; } 
    public string CanBeSecuredForUpdate { get; set; } 
} 

UPDATE

Пример использования с Json.NET

using LightInject; 
using System; 

namespace Sample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var x = new Rootobject(); 
      x.panels = new System.Collections.Generic.Dictionary<string, panel>(); 
      x.panels.Add("LBL_EDITVIEW_PANEL1", new panel() 
      { 
       label_value = "", 
       rows = new row[] 
       { 
        new row 
        { 
         name = "subject", 
         label_value = "Subject", 
         label = "subject", 
         type = "String", 
         required = "true", 
         CanBeSecuredForCreate = "false", 
         CanBeSecuredForRead = "false", 
         CanBeSecuredForUpdate = "false", 
        }, 
        new row 
        { 
         name = "scheduledstart", 
         label_value = "Start Time", 
         label = "scheduledstart", 
         type = "DateTime", 
         required = "true", 
         CanBeSecuredForCreate = "false", 
         CanBeSecuredForRead = "false", 
         CanBeSecuredForUpdate = "false", 
        }, 
       }, 
      }); 

      Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(x)); 

      Console.ReadLine(); 
     } 
    } 
} 
0

Я постараюсь помочь. Кажется, что вы муравьете, чтобы получить объект C# из строки json. Я покажу более простой пример десериализации json-объекта в Visual Studio. Щелкните правой кнопкой мыши на свой проект и найдите Управление пакетами получения Nu. При открытии окна поиск Newtonsoft package. Теперь для вашей основной программы.

using System; 
using System.Collections.Generic; 
using Newtonsoft.Json; 

public DeserializeObjectClass() 
{ 
    static void Main(string[] args) 
    { 
     // Code for getting json object. 
     string jsonObject = "{'panels': {'address": 'random', 'id': '0'}}"; 
     panels myPanel = JsonConvert.DeserializeObject<panels>(jsonObject); 

     Console.WriteLine(panel.adress); 
    } 
} 

// And now for you panel object in c# 
public class panels 
{ 
    public panels() 
    { 
    } 

    public string address { get; set; } 

    public string id { get; set; } 

} 

Я показываю это как пример он может иметь некоторые предупреждения или незначительные ошибки becouse я не проверял еще.

+1

Это не решит вопрос OP. – croxy

+0

yah, но если он хочет научиться десериализовать json-объект, это может быть стартер – Luke359

Смежные вопросы