从json解析动态c#类
我想用给定的JSON构建一个动态类。 我用Atm解析json从json解析动态c#类,c#,json,dynamic,jsonconvert,C#,Json,Dynamic,Jsonconvert,我想用给定的JSON构建一个动态类。 我用Atm解析json dynamic customConfig = JsonConvert.DeserializeObject(configJson); 与其他json一起工作很好,但我的问题是属性的名称(这里valueOne和valueTwo是“动态的”,我总是得到其他的) 我知道我是否知道可以获取的名称,例如customConfig.config.valueOne.description的描述 但是我能做些什么来获得描述,例如,没有valueOne
dynamic customConfig = JsonConvert.DeserializeObject(configJson);
与其他json一起工作很好,但我的问题是属性的名称(这里valueOne和valueTwo是“动态的”,我总是得到其他的)
我知道我是否知道可以获取的名称,例如customConfig.config.valueOne.description的描述
但是我能做些什么来获得描述,例如,没有valueOne的名称
configJson=
"config": {
"valueOne":{
"description": "My first example value.",
"defaultValue": "Example 1",
"isRequired":false
},
"valueTwo":{
"description": "My second example value.",
"defaultValue": "Example 2",
"isRequired":false
},
},
我试着让它在一个循环,但我没有得到它到另一个类
foreach (var param in customConfig.config)
{
foreach (var item in param)
{
Config.config.description[i] = item.description;
}
i++;
}
item.description获得了正确的描述,但为什么我不能将其保存在另一个类中(它也是动态的)?
Config.config.description[i] = item.description;
如果description[i]为null,我会得到一个例外,但是为什么您的循环可能存在一些其他潜在的逻辑问题,以及您试图在那里实现什么,但是为了回答您的特定问题,您可能需要初始化CustomConfigModel类的“config”和“data”成员。例如
public class CustomConfigModel
{
public CustomConfigModel()
{
this.data = new ExpandoObject();
this.config = new ExpandoObject();
}
public dynamic data { get; set; }
public dynamic config { get; set; }
}
我可以访问您想要的描述,我想是这样的(我的输出): 如果您事先知道主项名称“config”,就可以解析并去掉它,这样您就可以得到值:“valueOne”或“valueTwo”。从我的示例代码中可以看到,可以通过迭代获得描述值。您可以从这个示例中开发进一步的功能。请让我知道这是否适合你 下面是示例代码:
class Program
{
static void Main(string[] args)
{
string configJson = @"{
'config': {
'valueOne':{
'description': 'My first example value.',
'defaultValue': 'Example 1',
'isRequired':false
},
'valueTwo':{
'description': 'My second example value.',
'defaultValue': 'Example 2',
'isRequired':false
},
}
}";
JObject customConfig = (JObject)JsonConvert.DeserializeObject(configJson);
var children = customConfig.Children().Children();
List<JToken> subList = new List<JToken>();
foreach (JToken token in children.Values())
{
string key = token.Path;
subList.AddRange(token.Values());
JToken subitem = subList.Find(q => q.Path.Contains("description"));
string desc = ((JProperty)subitem).Value.ToString();
Console.WriteLine("Token key: '" + key + "' ->>>> 'description' : '" + desc+"'");
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
字符串configJson=@”{
“配置”:{
“valueOne”:{
“description':“我的第一个示例值”,
“defaultValue”:“示例1”,
“isRequired”:false
},
“价值二”:{
“description':“我的第二个示例值”,
“defaultValue”:“示例2”,
“isRequired”:false
},
}
}";
JObject customConfig=(JObject)JsonConvert.DeserializeObject(configJson);
var children=customConfig.children().children();
列表子列表=新列表();
foreach(子级.Values()中的JToken标记)
{
string key=token.Path;
subList.AddRange(token.Values());
JToken subitem=subList.Find(q=>q.Path.Contains(“description”);
字符串desc=((JProperty)子项).Value.ToString();
Console.WriteLine(“令牌密钥:‘“+key+‘->>>>>>‘说明’:‘“+desc+‘’”);
}
}
}
public class CustomConfigModel{public dynamic data{get;set;}public dynamic config{get;set;}}var config=new CustomConfigModel();不要把你的评论作为答案。把它们写在主要问题下面。
class Program
{
static void Main(string[] args)
{
string configJson = @"{
'config': {
'valueOne':{
'description': 'My first example value.',
'defaultValue': 'Example 1',
'isRequired':false
},
'valueTwo':{
'description': 'My second example value.',
'defaultValue': 'Example 2',
'isRequired':false
},
}
}";
JObject customConfig = (JObject)JsonConvert.DeserializeObject(configJson);
var children = customConfig.Children().Children();
List<JToken> subList = new List<JToken>();
foreach (JToken token in children.Values())
{
string key = token.Path;
subList.AddRange(token.Values());
JToken subitem = subList.Find(q => q.Path.Contains("description"));
string desc = ((JProperty)subitem).Value.ToString();
Console.WriteLine("Token key: '" + key + "' ->>>> 'description' : '" + desc+"'");
}
}
}