[英]Rest API C# Mapping Classes Best Approaches for complex objects
我有一个复杂的 json 对象,我正在将它反序列化为 API 中的 dto 类。 将此类映射到模型类时,我尝试了两种选择:
例如: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.