代码之家  ›  专栏  ›  技术社区  ›  Alex Gordon

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

  •  1
  • Alex Gordon  · 技术社区  · 6 年前

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

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

    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(如上面的类中所定义的),则不会读取数据。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Piotr Kula David Boike    6 年前

    UpperCamelCase 在C#和 lowerCamelCase 对于JSON/JS

    所以像你这样混用约定是个坏主意,只会给实体之类的库带来问题,给其他用户带来可读性方面的问题,一旦你开始做API调用就会完全混乱。

    更新表实体以使用所有 大写camelcase . 这同样适用于DTO,因为JSON Convert将自动应用 下部金属外壳 在JavaScript的序列化和反序列化过程中,同时保持代码在C#约定内。

    有一个选项告诉实体忽略大小写。。。但我宁愿给你一个外部的意见,不要改变那些由聪明人制定的惯例。。。而是要改变你的方法,让每个人的生活更轻松。

    假设这种标准的C#(大写)书写方式

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

    然后通过MVC或API中的ActionResult返回它

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

    { "translateFrom" : "z-axis" }
    

    反之亦然。您可以将大小写发送到C#MVC/API并Newtonsoft.JSON文件会解决的。但您应该坚持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; }
    }