C# 将JSON对象反序列化为类对象,但很少有属性需要重新映射
我有这样的课C# 将JSON对象反序列化为类对象,但很少有属性需要重新映射,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,我有这样的课 public partial class KipProjectMaster { public int Id { get; set; } public string ProjectCode { get; set; } public string ProjectName { get; set; } public string ProjectActive { get; set; } public string ProjectLevel { get;
public partial class KipProjectMaster
{
public int Id { get; set; }
public string ProjectCode { get; set; }
public string ProjectName { get; set; }
public string ProjectActive { get; set; }
public string ProjectLevel { get; set; }
}
这实际上是SQL中表ProjectMaster的模型类及其使用实体框架。
我可以将项目添加并保存到表中,而不会出现任何问题。但最近JSON字段发生了变化
项目代码和项目名称。其他人也一样。实际上,在我的实际模型/表格中,大约有35列。那么,我如何在不重命名模型或表的情况下处理这种情况呢。我是否需要从此类继承并使用任何映射或更好的方法?您的实体类是实体类,而您的JSON类是JSON类。这是两个完全不同的目的,因此您不应该重用或继承这些类。他们甚至不应该互相了解 您可以在控制器或业务逻辑中从一个映射到另一个 这种完全断开连接允许您在不破坏JSON API的情况下修改数据库模式,反之亦然 当然,您可以将
[JsonProperty(Name=“Foo”)]
放在字符串Foo{get;set;}
列属性之上,但现在您混合了两个目的。在不破坏某些内容的情况下,您无法再更改Foo的数据类型,您无法将其移动到另一个表(即另一个类),您无法在不再需要时删除它,您无法将其标记为[必需]
,因为这在两种上下文中都意味着其他内容,数据库中不能有与DTO中的Foo
没有任何关系的属性Foo
,以此类推
另见:
请注意,无论您是将此应用于自己的API(公开DTO)还是使用其他人的API(将他们的DTO按原样存储在数据库中),这都无关紧要;这两种方法都有缺点。但反序列化时,我们只是将其与属性名自动映射,不是吗?好的。。我实际上被认为使用实体类也是为了反序列化,这是错误的,不是吗?(我认为只有2-3个字段的名称不同)是的,这是错误的。