.net refit post请求body 无法序列化[JsonProperty(“A“)]大写
場景:有個項目需要用到refit請求第三方接口,這個接口的請求參數是需要大寫的,如果用了refit自帶的AliasAs參數或者用JsonProperty("A")都無法序列化參數字段大寫“A”,都會被首字母駝峰策略序列化成小寫“a”
[AliasAs("A")] public string Name { get; set; } var otherApi = RestService.For<IOtherApi>("https://api.example.com",new RefitSettings {ContentSerializer = new NewtonsoftJsonContentSerializer(new JsonSerializerSettings {ContractResolver = new CamelCasePropertyNamesContractResolver()})});后面查google都找不到解決方法,后面看了這個問題有了些思路
https://github.com/reactiveui/refit/issues/1122
把CamelCasePropertyNamesContractResolver 改成CamelCaseNamingStrategy,參考兩種區別:https://stackoverflow.com/questions/57774336/camelcasenamingstrategy-vs-camelcasepropertynamescontractresolver
應該是由于CamelCasePropertyNamesContractResolver策略強制轉化首字母小寫,CamelCaseNamingStrategy默認的就是DefaultContractResolver + CamelCaseNamingStrategy,才可以正常達到以下效果:
1. 沒有標記JsonProperty的,默認小寫
2. 有標記JsonProperty的,嚴格按照JsonProperty配置的Name
注意:如果換成CamelCaseContractResolver,會使用JsonProperty的Name,但同時也會把他強制轉成小寫
改完后的代碼:
var otherApi = RestService.For<IOtherApi>("https://api.example.com",new RefitSettings {ContentSerializer = new NewtonsoftJsonContentSerializer(new JsonSerializerSettings {ContractResolver = new DefaultContractResolver(){NamingStrategy = new CamelCaseNamingStrategy()}})});總結
以上是生活随笔為你收集整理的.net refit post请求body 无法序列化[JsonProperty(“A“)]大写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Refused to display ‘
- 下一篇: 信贷业务系统