如何注释DTO以启用不区分大小写的映射?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何注释DTO以启用不区分大小写的映射?相关的知识,希望对你有一定的参考价值。
如何在不知道源列名称的情况下将数据读入具体模型?
我正在从表存储中读取数据:
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#中的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; }
}
以上是关于如何注释DTO以启用不区分大小写的映射?的主要内容,如果未能解决你的问题,请参考以下文章