如何将下面的JSON反序列化为C#数组或更易于管理。
{
"data": [
{
"PropertyName": [
{
"Key1": "test",
"Key2": "afafa"
},
{
"Key1": "test",
"Key2": "afafa"
}
],
"PropertyName2": [
{
"Key1": "test",
"Key2": "afafa"
},
{
"Key1": "test",
"Key2": "afafa"
}
]
}
]
}
它以动态参数的形式出现:
public IActionResult SAve([FromBody] dynamic mapping)
我通常将其设为一个具体的类,但是“ PropertyName”将更改为不同的名称,因此我需要一些灵活的东西。它的内容可以是具体的,因为它只是两个属性。
我认为它可能像字典。
Dictionary<string, ConcreteClass>()
我只是不知道如何将其转换成这种形式。
编辑。
我已经提出建议了,但是没有用
{{
"data": [
{
"propertyName": [
{
"key1": 1,
"key2": "1"
},
{
"key1": 2,
"key2": "2"
}
]
}
]
}}
我试图这样转换
var ddd = JsonConvert.DeserializeObject<List<MappingDto>>(mapping.data.ToString());
这将在数组中创建一个空对象。如果我没有将其包装在集合中,则会收到其他错误
public class MappingDto
{
public List<Dictionary<string, List<Item>>> Items { get; set; }
}
public class Items
{
public string Key1{ get; set; }
public string Key2{ get; set; }
}
答案 0 :(得分:2)
对于此JSON,处理您所描述的动态属性名称的具体类结构如下所示:
public class MappingDto
{
public List<Dictionary<string, List<Item>>> Data { get; set; }
}
public class Item
{
public string Key1 { get; set; }
public string Key2 { get; set; }
}
请确保将方法签名更新为使用新类,而不是dynamic
:
public IActionResult SAve([FromBody] MappingDto mapping)
然后您可以像这样访问数据:
foreach (var dict in mapping.Data)
{
foreach (var kvp in dict)
{
Debug.WriteLine(kvp.Key);
foreach (var item in kvp.Value)
{
Debug.WriteLine(" Key1: " + item.Key1);
Debug.WriteLine(" Key2: " + item.Key2);
}
}
}