{ "id": "5", "name": "Example" }
,我可以使用obj.id或obj.name调用该值
但
我有一个带有一个属性Array的JSON,该属性在每个实例中可能有所不同。例如
{
"id": "5",
"name": "Example",
},
"config": {
"Time": "13:23",
"Days": ["Monday", "Thuesday"]
}
或
{
"id": "5",
"name": "Example",
},
"config": {
"ServerURL": "https://example.com",
"Category": "API"
}
那么我如何将这些不同的JSON转换为一个动态对象?
答案 0 :(得分:1)
您可以执行以下操作:
var jObj = JObject.Parse(jsonData);
jObj成为您的“一个动态对象”,以访问更多属性:
var idObject= jObj["id"].ToObject<string>();
对于配置,您可以执行以下操作:
var configInfo = jObj["config"].ToObject<Dictionary<string, string>>();
PS:我有类似的问题,您可以在JSON to object C# (mapping complex API response to C# object)处查看问题并回答https://stackoverflow.com/a/46118086/4794396
编辑:
您可能要映射配置,以将配置信息映射为.ToObject<Dictionary<string, object>>()
之类的,因为它可以是任何东西。
答案 1 :(得分:0)
您可以使用这种方法,这对我来说效果很好。
var vModel = JsonConvert.DeserializeObject<T>(JsonData, new IsDateTimeConverter { DateTimeFormat = "dd/mm/yyyy", culture = cultureInfo.InvariantCulture});
答案 2 :(得分:0)
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;
}
如果您的json包含示例ServerURl,那么Json将基于property(Field name)转换对象,并且Category Time days将为null,反之亦然。您可以根据null检查哪个json到达
答案 3 :(得分:0)
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();