ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-06-12 19:03:55  阅读:202  来源: 互联网

标签:conversion set 沟通 get odata https naming com public


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()

 

 

 

标签:conversion,set,沟通,get,odata,https,naming,com,public
来源: https://www.cnblogs.com/keatkeat/p/14878768.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有