.net refit post请求body 无法序列化[JsonProperty(“A“)]大写

场景:有个项目需要用到refit请求第三方接口,这个接口的请求参数是需要大写的,如果用了refit自带的AliasAs参数或者用JsonProperty("A")都无法序列化参数字段大写“A”,都会被首字母驼峰策略序列化成小写“a”

[AliasAs("A")]
public string Name { get; set; }
var otherApi = RestService.For("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("https://api.example.com",
    new RefitSettings {
        ContentSerializer = new NewtonsoftJsonContentSerializer(
            new JsonSerializerSettings {
                ContractResolver = new DefaultContractResolver()
                            {
                                NamingStrategy = new CamelCaseNamingStrategy()
                            }
        }
    )});

你可能感兴趣的:(JSON,Refit,.net,java,前端)