前后端沟通 naming conversion 转换需要知道的事

Posted 兴杰(stooges.com.my)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前后端沟通 naming conversion 转换需要知道的事相关的知识,希望对你有一定的参考价值。

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 转换需要知道的事的主要内容,如果未能解决你的问题,请参考以下文章

81前后端等上下游岗位配合的思考和参考工作方法,望文知意,约定优于沟通

前后端协同开发

写在开始前---web前后端对接

前后端分离-Vue-登录

转Web实现前后端分离,前后端解耦

前后端分离时代--Swagger接口文档的配置与使用