在.NET(C#)项目中自定义List类适配JSON响应
解决C#自定义List类与系统List冲突及JSON反序列化问题
方案1:重命名自定义类(最推荐)
直接将对应JSON "list"节点的自定义类重命名为不冲突的名称(比如WeatherList),通过JsonProperty特性映射到JSON的"list"字段,彻底避免命名冲突:
// 自定义类,对应JSON的list节点结构 public class WeatherList { public DateTime Dt { get; set; } public WeatherMain Main { get; set; } // 其他对应JSON的属性... } // 顶级容器类 public class WeatherResponse { // 用JsonProperty指定JSON中的"list"节点映射到当前属性 [JsonProperty("list")] public List<WeatherList> WeatherItems { get; set; } // 其他顶级响应属性... }
方案2:给自定义List类添加独立命名空间
如果必须保留List作为类名,将其放入专属命名空间,使用时通过完全限定名或别名区分系统List:
步骤1:定义带命名空间的自定义List类
namespace MyProject.WeatherModels { public class List { public DateTime dt { get; set; } public Main main { get; set; } // 其他属性... } }
步骤2:在顶级容器类中明确区分
- 方式一:使用完全限定名
public class WeatherResponse { // 明确指定系统泛型List,以及自定义List的命名空间 public System.Collections.Generic.List<MyProject.WeatherModels.List> list { get; set; } }
- 方式二:使用别名简化代码
在代码文件顶部添加别名声明:
// 给系统List和自定义List分别起别名 using SysList = System.Collections.Generic.List; using WeatherList = MyProject.WeatherModels.List; public class WeatherResponse { public SysList<WeatherList> list { get; set; } }
方案3:使用全局别名(针对整个项目)
如果多个文件都需要区分,可在项目属性中添加全局别名:
- 右键项目 → 属性 → 生成 → 高级 → 其他编译选项
- 添加:
/r:System.Collections.Generic.List=SysList - 之后在代码中直接用
SysList<MyProject.WeatherModels.List>来指代系统泛型List
内容的提问来源于stack exchange,提问作者Gogu CelMare
相关产品推荐
相关产品推荐

