c# 是 pascal case, js 是 camel case 所以在做 web api 和 odata 的时候经常需要转换.

早年 web api 是依赖 Newtonsoft json (JSON.NET) 的, 所以我们常看见

[JsonProperty(propertyName: "name_cn")]
public string Name { get; set; } = "";

或者

[DataMember(Name = "name_cn")]
public string Name { get; set; } = "";

2 个都可以用, data member 是微软自己的, 好像是 wcf 带下来的. JsonProperty 是 newton 的.

而 newton 也会去读 data member 所以就通用了.

后来微软不依赖 newton 了, 改成了 System.Text.Json

就用了后来的

[JsonPropertyName("name_cn")]
public string Name { get; set; } = "";

所以现在的话,应该是用 JsonPropertyName 就对了

一般的 pascal case to camel case 什么都不需要设置, 默认就可以了

frombody, fromform 都是 ok 的.

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-customize-properties

那么 odata 从来就不是用 newton 的, 所以不支持 JsonProperty

现在呢, 它视乎也没有要支持 System.Text.Json, 所以也是不可以用 JsonPropertyName

有个 feature request : https://github.com/OData/WebApi/issues/2174

那么, odata 可以 2 种做法.

第一种就是用 DataMember, 这个是微软的嘛, 而已 odata 和 wcf 靠很近.

https://docs.microsoft.com/en-us/odata/webapi/convention-model-builder

注 : 要写全套哦, DataContract, DataMember, Key 都要

[DataContract]
public class Product
{
[DataMember]
[Key]
public int Id { get; set; }
[DataMember(Name = "name_cn")]
public string Name { get; set; } = "";
[DataMember]
public ProductStatus Status { get; set; }
}

之前我也遇过一个 enum to string 的问题.

https://github.com/OData/WebApi/issues/2264

EnumMember 和 DataContract 也是一类的, 那时候也是一定要写 DataContract 才有用.

第二种就是在 builder 的时候直接改.

https://stackoverflow.com/questions/42016069/how-to-query-odata-while-using-alternate-property-names

如果你 2 个都写的话, builder 会盖过 data member 哦

一般的 pascal case to camel case

https://stackoverflow.com/questions/24909532/odata-json-camelcase

builder.EnableLowerCamelCase()

前后端沟通 naming conversion 转换需要知道的事的更多相关文章

  1. 十件你需要知道的事,关于openstack-trove(翻译)

    开源数据库即服务OpenStack Trove应该知道的10件事情 作者:Ken Rugg,Tesora首席执行官 Ken Rugg是Tesora的创始人,CEO和董事会成员. Ken的大部分职业都是 ...

  2. C# 范型约束 new() 你必须要知道的事

    C# 范型约束 new() 你必须要知道的事 注意:本文不会讲范型如何使用,关于范型的概念和范型约束的使用请移步谷歌. 本文要讲的是关于范型约束无参构造函数 new 的一些底层细节和注意事项.写这篇文 ...

  3. 网站开发进阶(三十八)Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  4. Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  5. 关于Unicode,字符集,字符编码,每个程序员都应该知道的事

    关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...

  6. IL命令初学者要知道的事

    在一个中间语言程序中,如果某一行以“.”开始,代表这是一个传输给汇编工具的指令:而不是以“.”开始的行是中间语言的代码.上图中.method是方法定义指令,定义了Main方法,参数在“()”中,IL代 ...

  7. 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事

    WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...

  8. 学javascript必须要知道的事

    第一:变量声明 在使用javascript时使用变量时首先做的是声明变量,变量声明的关键字是var. 例子: var i; var sum; 也可以多个变量声明: var i,sum; 还可以在声明时 ...

  9. 学习IOS需要知道的事

    什么是iOS iOS是一款由苹果公司开发的操作系统(OS是Operating System的简称),就像平时在电脑上用的Windows XP.Windows 7,都是操作系统 那什么是操作系统呢?操作 ...

  10. 关于感受野 (Receptive field) 你该知道的事

    Receptive field 可中译为“感受野”,是卷积神经网络中非常重要的概念之一. 我个人最早看到这个词的描述是在 2012 年 Krizhevsky 的 paper 中就有提到过,当时是各种不 ...

随机推荐

  1. JS原生实现html转pdf / html转图片 (html2canvas.js + jspdf.js )

    <button onclick="HtmlToPdf()"> 转储pdf </button> <button onclick="HtmlTo ...

  2. 免费的壁纸API

    最近在给EasyDesktop增加背景的功能, 考虑自己在服务器上部署壁纸, 维护成本比较高, 就找了几个免费的壁纸接口, 体验还不错, 这里简单记录一下. 1.Bing壁纸API 地址是: http ...

  3. 指针_C

    指针的代码 // Code file created by C Code Develop #include "ccd.h" #include "stdio.h" ...

  4. Microsoft Dynamics CRM 高级查找不能搜索实体的解决方案(浏览器插件)

    背景 我们搜索某个实体的记录的时候,一般会去对应的视图"可用的XXX",但是视图自带的条件过滤了一些数据,或者缺少了我们所需要的列,或者不能查询关联实体.这时候我们需要用到高级查找 ...

  5. 安全可信,Solon v2.8.6 发布

    Solon 框架! Java "纯血国产"应用开发框架.开放原子开源基金会,孵化项目.从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态. 追求: 更快.更小.更 ...

  6. 我出一道面试题,看看你能拿 3k 还是 30k!

    大家好,我是程序员鱼皮.欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k).初级(10k).中级(15k)还是 ...

  7. 【MySQL】 将字段相同的记录排在一起,按时间倒序

    一.实现效果: 蓝牙mac字段是相同的记录,排在一起,再按时间倒序,总体时间来说也需要倒序 二.SQL编写: 最开始的想法就是,那我直接按mac和时间排序不就好了 SELECT * FROM aca_ ...

  8. 【Git】04 文件删除

    版本分支的概念提示: 工作区就是我们的Git本地仓库,也就是一个很普通的目录 . 通过ADD指令添加文件到暂存区中, 在通过COMMIT指令提交到版本分支, 所谓的版本分支,就是就是这个蓝色的Mast ...

  9. 解决GitHub不显示图片问题——GitHub图片显示失败

    在Github上打不开图片是一个极为常见的事情,出现这样的问题的原因就是我们的主机无法正确解析图片所在主机域名对应的IP地址,下面给出一个在本地主机(window10)上使用ping命令解析目标主机域 ...

  10. 【转载】 Ubuntu 中开机自动执行脚本的两种方法

    原文地址: https://www.jianshu.com/p/6366d7070642 作者:貘鸣来源:简书 ============================================ ...