Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将JSON对象反序列化为类对象,但很少有属性需要重新映射_C#_Entity Framework_.net Core - Fatal编程技术网

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个字段的名称不同)是的,这是错误的。