繁体   English   中英

Rest API C# 映射类复杂对象的最佳方法

[英]Rest API C# Mapping Classes Best Approaches for complex objects

我有一个复杂的 json 对象,我正在将它反序列化为 API 中的 dto 类。 将此类映射到模型类时,我尝试了两种选择:

  1. IConverter 接口和每个类的实现。
  2. 静态映射器类

例如:Json 对象:

{
 "Response": 
          {
        "Detail": {
            "Subject": "GE",
            "Address": {
                "CountryCode": "US"
                      }
                  } 
       }
  }

对于此对象,响应类将具有类型为 Detail 类的属性,该类将具有类型为 Subject 、Address 等的属性。

因此,对于第一种方法,我必须为源和目标中的每个类创建单独的类映射器。 喜欢:

public class DetailMapper<DetailDto, DetailModel>:IConvert<DetailDto, 
                          DetailModel>
{
   private IConvert<SubjectDto,SubjectModel> subconvert;
   private IConvert<AddressDto,AddressModel> addconvert;

    public DetailMapper(IConvert<SubjectDto,SubjectModel> 
                       sub,IConvert<AddressDto,AddressModel> add)
       {
            subconvert=sub;
            addconvert=add;
       } 

    public DetailModel Convert(DetailDto detailDto)
      {
       //logic
       }
   }

当 JSON 对象更复杂时,这种模式的可读性会降低,因为每个注入的类都有更多的转换器实现。

2.对于第二种方法,我使用静态方法创建了单个映射器类,以将 dto 类转换为如下模型:

     public class Mapper()
    {
     public static ResponseModel Convert(ResponseDto res)
     {
      //logic
     }

      public static DetailModel Convert(DetailDto det)
      {
        //logic
       }
      }

第二种方法似乎为我提供了更多的可读性,但我担心在 Api 中对映射器类使用静态方法是否可以。

我想知道在 c# 中映射 2 个类的最佳方法和模式是什么。

对于复杂和/或循环映射,我会考虑使用AutoMapper 之类的工具,它为您提供自动的“同名”映射,并允许您轻松配置通用和特定映射规则。

也许我在这里遗漏了一些东西,但为什么不直接将 JSON 字符串反序列化为正确的类型,即在 .NET Core 中使用 JsonSerializer.Deserialize(JSON),或者 Newtonsoft 具有相同的机制。 有什么理由不能使用这种方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM