有没有一种方法可以将JSON内容反序列化为C#动态类型? 能够跳过创建大量的类以使用DataContractJsonSerializer
将是很好的。
有没有一种方法可以将JSON内容反序列化为C#动态类型? 能够跳过创建大量的类以使用DataContractJsonSerializer
将是很好的。
{
"employees":
[
{ "name": "Darth", "surname": "Vader", "age": "27", "department": "finance"},
{ "name": "Luke", "surname": "Skywalker", "age": "25", "department": "IT"},
{ "name": "Han", "surname": "Solo", "age": "26", "department": "credit"}
]
}
获取数据值列表
JObject array = JObject.Parse(model.JsonData);
var tableData = new List<JsonDynamicModel>();
foreach (var objx in array.Descendants().OfType<JProperty>().Where(p => p.Value.Type != JTokenType.Array && p.Value.Type != JTokenType.Object))
{
var name = ((JValue)objx.Name).Value;
var value = ((JValue)objx.Value).Value;
if (tableData.FirstOrDefault(x => x.ColumnName == name.ToString()) == null)
{
tableData.Add(new JsonDynamicModel
{
ColumnName = name.ToString(),
Values = new List<string> { value.ToString() },
});
}
else
{
tableData.FirstOrDefault(x=>x.ColumnName == name.ToString()).Values.Add(value.ToString());
}
}
// output
tableData[0].ColumnName -> "name";
tableData[0].Values -> {"Darth", "Luke", "Han" }
tableData[1].ColumnName -> "surname";
tableData[1].Values -> {"Vader", "Skywalker", "Solo" }
...
string jsonString = @"
{
""Name"": ""Squid Game"",
""Genre"": ""Thriller"",
""Rating"": {
""Imdb"": 8.1,
""Rotten Tomatoes"": 0.94
},
""Year"": 2021,
""Stars"": [""Lee Jung-jae"", ""Park Hae-soo""],
""Language"": ""Korean"",
""Budget"": ""$21.4 million""
}";
Dictionary<string, string> dic = new Dictionary<string, string>();
JObject dynamicObject = JsonConvert.DeserializeObject<dynamic>(jsonString);
IEnumerable<JToken> list = ((IEnumerable<JToken>)dynamicObject).ToList();
foreach (JToken token in list)
{
string key = ((JProperty)token).Path;
string value = ((JProperty)token).Value.ToString();
dic.Add(key, value);
}