如何注释DTO以启用不区分大小写的映射?

问题描述 投票:1回答:1

如何在不知道源列名称的情况下将数据读入具体模型?

我正在从表存储中读取数据:

public static IEnumerable<Translation> GetTranslations(string sourceParty, string destinationParty)
{
    var acc = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable("RRRCacheStorageConnection"));
    var tableClient = acc.CreateCloudTableClient();
    var table = tableClient.GetTableReference(Environment.GetEnvironmentVariable("RRRTableCache"));

    TableQuery<Translation> rangeQuery = new TableQuery<Translation>().Where(
        TableQuery.CombineFilters(
            TableQuery.GenerateFilterCondition(Environment.GetEnvironmentVariable("SourcePartyColumnName"), QueryComparisons.Equal, sourceParty),
            TableOperators.And,
            TableQuery.GenerateFilterCondition(Environment.GetEnvironmentVariable("DestinationPartyColumnName"), QueryComparisons.Equal, destinationParty)));

    return table.ExecuteQuery(rangeQuery);
}

然后我转入一个具体的模型,看起来像这样:

public class Translation : TableEntity
{
    public Translation()
    {

    }
    public string translatefrom { get; set; }
    public string translateto { get; set; }
    public string TranslationId { get; set; }
    public string FieldType { get; set; }
    public string sourceparty { get; set; }
    public string destinationparty { get; set; }
}

但是,如果Azure中的源表具有名为TranslateFrom的字段而不是translatefrom(如上面的类中所定义),则不会读取数据。

如何在不知道源列名称的情况下将数据读入具体模型?

c# .net azure visual-studio-2017 azure-table-storage
1个回答
1
投票

您应该遵循C#中的UpperCamelCase和JSON / JS的lowerCamelCase的约定

因此,像你这样的混合约定是一个坏主意,只会导致像Entity这样的库出现问题,导致可读性方面的其他用户出现问题,一旦你开始做API调用就会完全混乱。

更新您的表实体以使用所有UpperCamelCase。这同样适用于DTO,因为JSON Convert将在JavaScript的序列化和解除序列化期间自动应用lowerCamelCase,同时将代码保留在C#约定中。

有一个选项可以告诉实体忽略套管......但我宁愿向你提供一个外部意见,不要改变那些由聪明人设置的惯例......而是修复你的方法,让每个人都能轻松生活这条线。

假设这种标准的C#编写方式(UpperCase)

public class TestClass {
   public string TranslateFrom { get; set; }
}

并通过MVC或API中的ActionResult返回它

public ActionResult SomeActionMethod() {
  return Json(new TestClass(){TranslateFrom="z-axis"});
}

JSON(属性命名约定)将是lowerCase

{ "translateFrom" : "z-axis" }

而另一种方式。您可以将大写或小写发送到C#MVC / API,Newtonsoft.JSON将会运行。但是您应该坚持使用始终为lowerCase属性的JavaScript约定。

你的课应该是这样的。

public class Translation : TableEntity
{
    public string TranslateFrom { get; set; }
    public string TranslateTo { get; set; }
    public string TranslationId { get; set; }
    public string FieldType { get; set; }
    public string SourceParty { get; set; }
    public string DestinationParty { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.