RestSharp在camelCase中序列化JSON

Shi*_*bbz 4 json camelcasing simplejson restsharp

我想在camelCase中发布JSON,并按照这里的说明操作:

https://github.com/restsharp/RestSharp/wiki/Deserialization#overriding-jsonserializationstrategy

public class CamelCaseSerializerStrategy : PocoJsonSerializerStrategy
{
    protected override string MapClrMemberNameToJsonFieldName(string clrPropertyName)
    {
    return char.ToLower(clrPropertyName[0]) + clrPropertyName.Substring(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我用这段代码创建一个新的客户端:

var client = new RestClient(_baseUrl);
SimpleJson.CurrentJsonSerializerStrategy = new CamelCaseSerializerStrategy();
Run Code Online (Sandbox Code Playgroud)

但是,在发出请求时,串行器未激活.RestSharp文档遍布整个地方,并且大部分都是错误的.查看源代码(RestRequest.AddBody),看起来根本不使用SerializerStrategy.

我一直在寻找一种在客户端级别进行此更改的方法,或者在不需要修改每个请求的地方.

我见过这个博客 - 也许这是唯一的方法.如果您只能在请求级别更改序列化策略,这似乎是RestSharp的一大步.

Mir*_*lad 9

我遇到了同样的问题.幸运的是,我设法按照此处提供的说明解决了这个问题.

基本上,对于每个请求,您必须设置JsonSerializerNewtonsoftJsonSerializer.例:

var request = new RestRequest();
request.JsonSerializer = new NewtonsoftJsonSerializer();
Run Code Online (Sandbox Code Playgroud)

以下来源NewtonsoftJsonSerializer:


public NewtonsoftJsonSerializer()
{
     ContentType = "application/json";
     _serializer = new JsonSerializer
     {
          MissingMemberHandling = MissingMemberHandling.Ignore,
          NullValueHandling = NullValueHandling.Include,
          DefaultValueHandling = DefaultValueHandling.Include
     };
}

public NewtonsoftJsonSerializer(JsonSerializer serializer)
{
     ContentType = "application/json";
     _serializer = serializer;
}


public string Serialize(object obj)
{
     using (var stringWriter = new StringWriter())
     {
         using (var jsonTextWriter = new JsonTextWriter(stringWriter))
         {
             jsonTextWriter.Formatting = Formatting.Indented;
             jsonTextWriter.QuoteChar = '"';

             _serializer.Serialize(jsonTextWriter, obj);

             var result = stringWriter.ToString();
             return result;
          }
     }
}

    public string DateFormat { get; set; }
    public string RootElement { get; set; }
    public string Namespace { get; set; }
    public string ContentType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

希望它能解决你的问题!


小智 6

RestSharp.Serializers.NewtonsoftJson

dotnet 添加包 RestSharp.Serializers.NewtonsoftJson

或者

管理 Nuget 包

然后

using RestSharp.Serializers.NewtonsoftJson;
...
public myRestSharpMethod() {

   ... 

   var client = new RestClient(url);

   client.UseNewtonsoftJson();

   // code continues..
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!


小智 0

顺序似乎并不重要。我正在尝试做类似的事情,但没有任何快乐。

奇怪的是,您无法在更全局的级别上覆盖序列化器和反序列化器(也许通过配置),而不必为 RestRequest 对象敲出某种包装器。必须根据每个请求进行设置(特别是当您执行大量请求时)似乎只是自找麻烦。