从json解析动态c#类

从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

我想用给定的JSON构建一个动态类。 我用Atm解析json

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+"'");
        }

    }
}