【问题标题】:Generate json key as snake_case with RestSharp使用 RestSharp 将 json 密钥生成为 snake_case
【发布时间】:2021-01-23 07:20:01
【问题描述】:

知道如何使用RestSharp 生成snake_case 的json 密钥吗?

使用Newtonsoft.Json,我可以设置类似这样的 json 输出

  DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new SnakeCaseNamingStrategy()
            };

            string json = JsonConvert.SerializeObject(requestData, new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
                Formatting = Formatting.Indented
            });

但我不确定如何使用RestSharp

var client = new RestClient(getService.MstUrl);

            client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", token));

            var request = new RestRequest(Method.POST).AddJsonBody(requestData);          

            var response = await client.ExecuteAsync(request);

它一直生成为camelCase。有Newtonsoft.Json之类的配置吗?

【问题讨论】:

    标签: c# asp.net-core restsharp


    【解决方案1】:

    使用 RestSharp,并不意味着你也不能使用Newtonsoft 序列化器。

    来自restsharp documentation

    RestSharp 通过单独的包支持 Json.Net 序列化程序。您可以从 NuGet 安装它。

    client.UseNewtonsoftJson();
    

    继续你所做的:

    DefaultContractResolver contractResolver = new DefaultContractResolver
    {
        NamingStrategy = new SnakeCaseNamingStrategy()
    };
    

    【讨论】:

      【解决方案2】:

      您应该能够创建自己的 IRestSerializer 实现并在 client.UseSerializer 中提供它

      给定

      public class SimpleJsonSerializer : IRestSerializer
      {
         private readonly DefaultContractResolver _contractResolver;
      
         public SimpleJsonSerializer()
         {
            _contractResolver = new DefaultContractResolver
            {
               NamingStrategy = new SnakeCaseNamingStrategy()
            };   
         }
         public string Serialize(object obj) => JsonConvert.SerializeObject(obj, new JsonSerializerSettings
         {
            ContractResolver = _contractResolver,
            Formatting = Formatting.Indented
         });
      
         public string Serialize(Parameter bodyParameter) => Serialize(bodyParameter.Value);
      
         public T Deserialize<T>(IRestResponse response) => JsonConvert.DeserializeObject<T>(response.Content);
      
         public string[] SupportedContentTypes { get; } =
         {
            "application/json", "text/json", "text/x-json", "text/javascript", "*+json"
         };
      
         public string ContentType { get; set; } = "application/json";
      
         public DataFormat DataFormat { get; } = DataFormat.Json;
      }
      

      用法

      var client = new RestClient(getService.MstUrl);
      
      client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", token));
      client.UseSerializer(() => new SimpleJsonSerializer(){});
      
      var request = new RestRequest(Method.POST).AddJsonBody(requestData);
      
      var response = await client.ExecuteAsync(request);
      

      免责声明:我已经好几年没用过RestSharp了,我也不想再用了。此外,我真的建议任何想用它切换回HttpClient,甚至更好的IHttpClientFactory 的人。更重要的是,这是完全未经测试的,仅作为示例给出。您可能需要根据您的需要对其进行修改

      【讨论】:

      • 可以分享你的经验为什么不再使用RestSharp
      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 2021-05-12
      • 2021-06-18
      • 1970-01-01
      • 2017-10-15
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多