【问题标题】:Deserialize JSON object into a class object, but few properties needs to be remapped将 JSON 对象反序列化为类对象,但很少有属性需要重新映射
【发布时间】:2021-03-04 12:31:57
【问题描述】:

我有这样的课

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字段发生了变化 Project_Code 和 Project_Name。其他都是一样的。实际上,在我的实际模型/表格中,大约有 35 列。那么如何在不重命名模型或表的情况下处理这种情况。我需要从这个类继承并使用任何映射或更好的方法吗?

【问题讨论】:

    标签: c# entity-framework .net-core


    【解决方案1】:

    您的实体类是一个实体类,而您的 JSON 类是一个 JSON 类。这是两个完全不同的目的,因此您不应重用或继承这些类。他们甚至不应该互相了解。

    您在控制器或业务逻辑中从一个映射到另一个。

    这种完全断开允许您在不破坏 JSON API 的情况下修改数据库架构,反之亦然。

    当然,您可以将 [JsonProperty(Name="Foo")] 放在您的 string Foo { get; set; } 列属性之上,但现在您混合了两个目的。你不能再改变 Foo 的数据类型而不破坏某些东西,你不能将它移动到另一个表(即另一个类),你不能在不再需要时删除它,你不能标记它[Required] 因为那在这两种情况下都有其他含义,您不能在数据库中拥有与 DTO 中的 Foo 没有任何关系的属性 Foo,依此类推。

    另见:

    还有很多其他的。

    请注意,无论是将其应用于您自己的 API(暴露您的 DTO)还是使用其他人的 API(将他们的 DTO 按原样存储在您的数据库中)都没有关系;缺点适用于两者。

    【讨论】:

    • 但是在反序列化时,我们只是让它与属性名称自动映射,不是吗?
    • OK.. 我实际上也被认为将实体类用于反序列化目的,这是错误的,不是吗? (我以为只有2-3个字段名称不同)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2014-08-22
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多