如何使用类层次结构将JSON转换为c#

本文关键字:转换 JSON 何使用 层次结构 | 更新日期: 2023-09-27 18:17:22

我有以下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_PANEL1, LBL_EDITVIEW_PANEL2, LBL_EDITVIEW_PANEL3。这真的很复杂。

我在问如何用编程的方式来做。

如何使用类层次结构将JSON转换为c#

所以在json中,"panels"对象将具有0到n "LBL_EDITVIEW_PANEL{number}"属性,其中n是无界的。这意味着面板对象的行为就像一个散列表。

这应该可以工作。字典键将被序列化为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用法示例。净

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

我会尽力帮忙的。似乎你想从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; }
}

我将其显示为示例,它可能有一些警告或小错误,因为我还没有测试它。

在Visual Studio中有一个选项:

  • 编辑>粘贴特殊>将JSON粘贴为类