如何使用类层次结构将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中,"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粘贴为类