繁体   English   中英

从 json 解析动态 c# 类

[英]parse Dynamic c# class from a json

我想用给定的 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 得到了正确的描述,但为什么我不能将它保存在另一个类中(这也是动态的)?

您的循环可能还有其他一些底层逻辑问题以及您试图在那里完成什么,但要回答您的特定问题,您可能需要初始化 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; }
}

我能够访问您想要的描述,我想但它是这种形式(我的输出):

Token key: 'config.valueOne' ->>>> 'description' : 'My first example value.'
Token key: 'config.valueTwo' ->>>> 'description' : 'My first example value.'

如果您事先知道主要项目名称“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+"'");
        }

    }
}

Config.config.description[i] = item.description;

是 description[i] 空,我得到一个例外但为什么

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM