如何使用Class层次结构将JSON转换为C#?

时间:2016-11-11 13:38:16

标签: c# json

我有以下JSON,我想使用类反序列化。我已经阅读了一些参考文献,但在这种情况下它不起作用。

我想创建可以反序列化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_PANEL1LBL_EDITVIEW_PANEL2LBL_EDITVIEW_PANEL3。这真的很复杂。

我问如何以编程方式执行此操作。

3 个答案:

答案 0 :(得分:1)

所以在你的json中,"面板"对象将具有0到n" LBL_EDITVIEW_PANEL {number}"属性,其中n是无界的。这意味着panel对象的行为类似于哈希表。

这应该有效。 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; }
}

<强>更新

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();
        }
    }
}

答案 1 :(得分:0)

Visual Studio中有一个选项:

  • 编辑&gt;选择性粘贴&gt;将JSON粘贴为类

答案 2 :(得分:0)

我会尽力帮忙。你好像从json字符串中获取一个c#对象。我将在 Visual Studio 中显示更简单的反序列化json对象的示例。 右键单击您的项目并搜索 Manage Nu Get Packages 。当窗口打开时,搜索 Newtonsoft 包。 现在为你的主程序。

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; }

}

我正在显示这个示例它可能会有一些警告或轻微错误因为我还没有测试过它。