3 回答
TA贡献1796条经验 获得超7个赞
您的数据模型应如下所示:
public class Info
{
public string prop1 {get;set;}
public string prop2 {get;set;}
public int prop3 {get;set;}
// Modified from
//public Dictionary<string, List<int>> prop4 {get;set}
public List<Dictionary<string, int>> prop4 {get;set;}
}
public class Response
{
// Modified from
//public class Dictionary<string, List<Info>> Item {get;set;}
public Dictionary<string, Info> Items {get;set;}
}
笔记:
Response.Item应该被命名为Items.
在您的 JSON 中,"Items"是一个具有可变名称对象值属性的对象:
{
"Items": {
"Item_1A": { },
"Item2B": { }
}
}
这应该建模为Dictionary<string, T>适当的非集合类型T。假设您正在使用json.net有关详细信息,请参阅序列化指南:字典。如果不,javascript序列化器 行为相似。
您的数据模型 ,public class Dictionary<string, List<Info>> Items将适用于具有可变名称数组值属性的对象:
{
"Items": {
"Item_1A": [{ },{ }],
"Item2B": [{ }]
}
}
但这不是你所拥有的。
同时"prop4"是一个包含对象的数组,该对象具有可变名称的对象值属性,例如:
"prop4": [ // Outer container is an array
{ // Inner container is an object
"prop_x": 100
},
{
"prop_y": 200
}
]
List<T>因此,应将诸如此类的集合用作外部泛型类型:
public List<Dictionary<string, int>> prop4 {get;set;}
请参阅序列化指南:IEnumerable、列表和数组。
如您所见,代码生成工具(例如如何从 JSON 对象字符串自动生成 C# 类文件中提到的工具)通常无法识别具有可变属性名称的 JSON 对象。在这种情况下,自动生成的类可能需要手动替换Dictionary<string, T>为包含类型中的适当属性。
样品工作小提琴在这里。
TA贡献1829条经验 获得超4个赞
这是在 json 之后创建代理类的提示:
首先,要确保它是有效的 JSON,请访问此网站并运行验证器:https ://jsonlint.com/
如果可以,有一些工具可以直接将 json 和 xml 转换为 ac# 代理类,例如: http: //json2csharp.com/:https ://xmltocsharp.azurewebsites.net/
现在你去吧!只需将它们复制到您的模型并开始使用它。
TA贡献1852条经验 获得超1个赞
只是对您的模型进行了一些小改动。你prop4是一个列表或数组。
public class Info
{
public string prop1 {get;set;}
public string prop2 {get;set;}
public int prop3 {get;set;}
public List<Dictionary<string, List<int>>> prop4 {get;set}
}
public class Response
{
public class Dictionary<string, Info> Items {get;set;} // Should be named Items
}
- 3 回答
- 0 关注
- 195 浏览
添加回答
举报