JSON.net snake case notation naming strategy

Evgeny Zborovsky · March 14, 2017

Communicating with backend in JSON can be challenging.
In case of C# model which by convention should be in CamelCase notation and backend which is using snake_notation we can easily solve the problem with Json.NET.

For example, we have the next model:

public class Model  
  public string FooBar { get; set; }  

and we want it to be serialised to: { “foo_bar”: “” }
We could use an attribute:

\[JsonProperty(PropertyName = "foo\_bar")\]  
public string FooBar { get; set; }

That will work, however, if we want to generalise this strategy we should create a JsonSerializerSettings with DefaultContactResolver which is using SnakeCaseNamingStrategy and to use it while serialisation/deserialization:

public class JsonCoverter : IJsonConverter
 private static JsonSerializerSettings defaultJsonSerializerSettings = 

new JsonSerializerSettings
  ContractResolver = new DefaultContractResolver  
   NamingStrategy = new SnakeCaseNamingStrategy()  
 public T Deserialize(string json) =>  
  JsonConvert.DeserializeObject(json, defaultJsonSerializerSettings);  
 public string Serialize(object obj) =>  
  JsonConvert.SerializeObject(obj, defaultJsonSerializerSettings);  

Using the JsonConverter globally will solve the different notation problem.

Twitter, Facebook