用C#out json创建动态对象
我想用Json在C#中创建一个动态类。 我知道我可以通过反序列化转换json,但我的问题是: 如果我知道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
{“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检查到达的Jsondynamic 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();