RestSharp Serialize JSON in camelCase

Shibbz picture Shibbz · Sep 30, 2015 · Viewed 10.2k times · Source

I am trying to post JSON in camelCase, and have followed the instructions here:

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);
    }
}

Then I am creating a new client with this code:

var client = new RestClient(_baseUrl);
SimpleJson.CurrentJsonSerializerStrategy = new CamelCaseSerializerStrategy();

Still, when making a request, the serializer is not activated. The RestSharp documentation is all over the place and largely incorrect. Looking at the source (RestRequest.AddBody), it doesn't look like the SerializerStrategy is used at all.

I was looking for a way to make this change at the client level, or somewhere that doesn't require modifying each request.

I've seen this blog - and maybe that's the only way. Seems like a huge step back for RestSharp if you can only change serialization strategies at the request level.

Answer

Mirel Vlad picture Mirel Vlad · Oct 13, 2016

I faced the exact same problem. Fortunately, I managed to solve it by following the instructions presented here.

Basically, for each request, you have to set the JsonSerializer to NewtonsoftJsonSerializer. Example:

var request = new RestRequest();
request.JsonSerializer = new NewtonsoftJsonSerializer();

The source for the NewtonsoftJsonSerializer below:


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; }
}

Hope it solves your problem!