gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:54:41 25 4
gpt4 key购买 nike

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

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

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# 编写方式(大写)

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

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

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

JSON(属性命名约定)将采用小写

{ "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; }
}

关于c# - 如何注释 DTO 以启用不区分大小写的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53672388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com