Joh*_*iße 4 c# json dynamic asp.net-core
我想用 Json 在 C# 中创建一个动态类。我知道我可以反序列化以转换 json 但我的问题是:如果我知道 json 的样子(例如,{ "id": "5", "name": "Example" }我可以使用 obj.id 或 obj.name 调用该值,但我有一个带有一个属性数组的 JSON在每种情况下都不同。EG
{
"id": "5",
"name": "Example",
},
"config": {
"Time": "13:23",
"Days": ["Monday", "Thuesday"]
}
Run Code Online (Sandbox Code Playgroud)
或者
{
"id": "5",
"name": "Example",
},
"config": {
"ServerURL": "https://example.com",
"Category": "API"
}
Run Code Online (Sandbox Code Playgroud)
那么我如何将这个不同的 JSON 转换为一个动态对象?
你可以这样做:
var jObj = JObject.Parse(jsonData);
Run Code Online (Sandbox Code Playgroud)
并且 jObj 成为您的“一个动态对象”,以访问更多属性:
var idObject= jObj["id"].ToObject<string>();
Run Code Online (Sandbox Code Playgroud)
或者对于配置,你可以这样做:
var configInfo = jObj["config"].ToObject<Dictionary<string, string>>();
Run Code Online (Sandbox Code Playgroud)
PS:我有类似的问题,您可以在JSON to object C# (mapping complex API response to C# object) 中查看问题并回答/sf/answers/3228266051/
编辑:
您可能想要映射配置来映射您的配置信息,.ToObject<Dictionary<string, object>>()因为它可以是任何东西..
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();
Run Code Online (Sandbox Code Playgroud)