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. oeasy教您玩转vim - 14 - # 行头行尾

    行头行尾 回忆上节课内容 我们这次了解了 大词 和 小词 小词 就是我们常规意义的词 被 =." 等标点分开的词 大词 里面包括了 =." 等标点 只能被空格.tab.换行分割 W ...

  2. c++ 关于返回值、将亡值的调用研究

    c++11引入右值引用,而出现右值引用的有这几种:返回值(将亡值),常量. class Obj { public: Obj() { cout << "构造函数" < ...

  3. Scratch植物大战僵尸全套素材包免费下载

    scratch植物大战僵尸全套素材包,包含227个丰富多样的素材,涵盖角色.背景.动态gif.为Scratch创作者提供丰富资源,助力创作精彩作品. 免费下载地址:www.xiaohujing.com ...

  4. linux环境部署搭建流程

    linux环境部署搭建流程 1,ubuntu/centos系统安装 2,ip网络配置 3,路由和防火墙 4,时间同步服务器 5,ssh协议配置(Windows安装xshell/secureCRT) 6 ...

  5. 【vue3】详解单向数据流,大家千万不用为了某某而某某了。

    总览 Vue3 的单向数据流 尽信官网,不如那啥. vue的版本一直在不断更新,内部实现方式也是不断的优化,官网也在不断更新. 既然一切皆在不停地发展,那么我们呢?等着官网更新还是有自己的思考? 我觉 ...

  6. 8、SpringMVC之RESTful案例

    阅读本文前,需要先阅读SpringMVC之RESTful概述 8.1.前期工作 8.1.1.创建实体类Employee package org.rain.pojo; import java.io.Se ...

  7. 【Big Data】 DBeaver连接Phoenix

    前言 Phoenix是Hbase数据库的一个SQL化中间件 Hbase本身是一个NoSQL类型的列族库,Phoenix可以将其转换成SQL操作 Phoenix提供的客户端Jar包,可以让DBeaver ...

  8. 【Vue】Re05 操作数组的API

    一.响应式处理的操作: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  9. 训练人形机器人时如何收集人类行为数据 —— 通过人来训练机器人(真人实际演示动作)or 仿真环境自动生成 —— 哪种方式更优、更可行呢

    特斯拉的老马,搞的optimus人形机器人就是通过人来训练机器人(真人实际演示动作),但是未来使用仿真环境自动生成数据是否可行呢,NVIDIA的老黄在2024 GTC上是大力推出自家的GROOT平台, ...

  10. AtCoder Beginner Contest 310

    freee Programming Contest 2023(AtCoder Beginner Contest 310) - AtCoder A - Order Something Else (atc ...