Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C#out json创建动态对象_C#_Json_Asp.net Core_Dynamic - Fatal编程技术网

用C#out json创建动态对象

用C#out json创建动态对象,c#,json,asp.net-core,dynamic,C#,Json,Asp.net Core,Dynamic,我想用Json在C#中创建一个动态类。 我知道我可以通过反序列化转换json,但我的问题是: 如果我知道json的样子(例如,{“id”:“5”,“name”:“Example”}我可以用obj.id或obj.name调用该值 但是 我有一个JSON,它有一个属性数组,在每个实例中都可能不同 { "id": "5", "name": "Example", }, "config": { "Time": "13:23", "Days": ["Monday", "Thu

我想用Json在C#中创建一个动态类。 我知道我可以通过反序列化转换json,但我的问题是: 如果我知道json的样子(例如,
{“id”:“5”,“name”:“Example”}
我可以用obj.id或obj.name调用该值 但是 我有一个JSON,它有一个属性数组,在每个实例中都可能不同

{
  "id": "5",
  "name": "Example",
  },
  "config": {
    "Time": "13:23",
    "Days": ["Monday", "Thuesday"]
}


那么,我如何将这些不同的JSON转换为一个动态对象呢?

您可以执行以下操作:

var jObj = JObject.Parse(jsonData);
jObj将成为您的“一个动态对象”,以访问更多属性:

var idObject= jObj["id"].ToObject<string>();
var idObject=jObj[“id”].ToObject();
对于配置,您可以执行以下操作:

var configInfo = jObj["config"].ToObject<Dictionary<string, string>>();
var configInfo=jObj[“config”].ToObject();
附:我也有类似的问题,你可以在查看问题并回答

编辑:
您可能需要映射配置,以便使用类似
.ToObject()
的东西映射配置信息,因为它可以是任何东西。

您可以使用这种方法,这对我来说非常有效

    var vModel = JsonConvert.DeserializeObject<T>(JsonData, new IsDateTimeConverter { DateTimeFormat = "dd/mm/yyyy", culture = cultureInfo.InvariantCulture});
var vModel=JsonConvert.DeserializeObject(JsonData,新的IsDateTimeConverter{DateTimeFormat=“dd/mm/yyyy”,culture=cultureInfo.InvariantCulture});
如果Json包含示例ServerURl,Json将基于属性(字段名)转换对象,类别时间天数将为null,反之亦然。您可以基于null检查到达的Json

dynamic o=new ExpandoObject();
        dynamic o = new ExpandoObject();
        o.Time = "11:33";
        var n = Newtonsoft.Json.JsonConvert.SerializeObject(o);

        dynamic oa = Newtonsoft.Json.JsonConvert.DeserializeObject<ExpandoObject>(n);
        Console.Write(oa.Time);
        Console.Read();
o、 Time=“11:33”; var n=Newtonsoft.Json.JsonConvert.SerializeObject(o); 动态oa=Newtonsoft.Json.JsonConvert.DeserializeObject(n); 控制台写入(oa.Time); Console.Read();
EDIT:仅“配置”字段有不同的属性,其余的总是OP提到的相同,因为结构在变化,所以没有固定的
t
。是的,但是如果我有100个不同配置的不同JSON,那么我必须创建100个类,对吗?系统中的ExpandooObject。动态名称空间看看usagelook,我刚刚发布了答案
public class YourObject
{
   public string id;
   public string Example;
   public YourConfig config;
}
public class YourConfig
{
   public string Time;
   public string[] Days;
   public string ServerUrl;
   public string Category;
}
        dynamic o = new ExpandoObject();
        o.Time = "11:33";
        var n = Newtonsoft.Json.JsonConvert.SerializeObject(o);

        dynamic oa = Newtonsoft.Json.JsonConvert.DeserializeObject<ExpandoObject>(n);
        Console.Write(oa.Time);
        Console.Read();