Servicestack.Text ConvertTo<>使用不同的名称或任何其他解决方案来映射属性?

时间:2018-01-04 11:40:40

标签: c# type-conversion servicestack servicestack-text

考虑我在我的Api模型中有这些类,因为其他操作可能需要具有不同属性的customerData我隐藏了这样的基本属性:

     public class AddCustomerInput:CustomerData
        {
            [Required]
            public new string Name { get; set; }
            [Required]
            public new string PublicKey { get; set; }
       }

和这堂课:

   public class ExternalCustomerData
        {              
            public new string CustomerName{ get; set; }               
            public new string PublicKey { get; set; }
        }

这两个模型属于Api级别,我在域级别有另一个模型:

    public static ExternalCustomerData ToExternalCustomerData(this CustomerData customerData)
    {
        //All properties with same property names convert correctly
        var externalCustomerData =customerData.ConvertTo<ExternalCustomerData>();
        //but the result of customerData.Name is null
        externalCustomerData .CustomerName= customerData.Name ;
        return externalCustomerData ;
    }

你可以看到这里的名字是customerName,这些模型在api和域模型名称中都有不同的名称,但我缩短了模型,

我也有这种扩展方法来转换类型:

addCustomerInputObject.ToExternalCustomerData();

当我对AddCustomerInput使用此扩展方法时:

externalCustomerData .CustomerName= customerData.Name

我看到具有相同属性名称的所有属性都正确转换,但是这一行:

 public static ExternalCustomerData ToExternalCustomerData(this AddCustomerInput customerData)
        {
        }

为空。 我想知道servicestack将这个父对象强制转换为child的原因是什么,我怎样才能实现名称的更改? 我想知道是否可以使用servicestack.text convertTo获得结果?如果没有这样做有什么好的解决方案吗?

*我知道我可以

Customer.
  joins(:orders).
  group('customers.id').
  where('orders.created_at > DATE_SUB(NOW(), INTERVAL 3 MONTH)')
  select('sum(orders.id), customers.*')

它运行正常,但我有很多apiInput模型,它们都是从CustomerData继承的,我应该有很多扩展方法。

1 个答案:

答案 0 :(得分:1)

ServiceStack's Auto Mapping不支持使用不同名称的地图属性,建议use Extension Methods处理所需的任何其他自定义。