Search code examples
c#json.netjsonconverter

Selecting a NamingStrategy when using a JsonConverter on a class property


I've got a c# class that I am trying to correctly serialise using Newtonsoft.Json. The property is an enumeration type and I wish the value to be serialised as the "lowercase version of the enumeration name". There is a JsonConverterAttribute available for specifying this on the property and also a prewritten StringEnumConverter but I need to specify the CamelCaseNamingStrategy on that converter but I can't work out the syntax.

I've tried to assign it on the property itself:

public class C
{
    [JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
    public ChartType ChartType { get; set; }
}

and I've also tried adding it similarly onto the enumeration type itself:

[JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
public enum ChartType { Pie, Bar }

But the syntax is wrong. I can't find any examples of this in the Newtonsoft documentation.

The desired serialision would be: "ChartType":"pie" or "ChartType":"bar"

Any ideas? Thanks.


Solution

  • Okay, this appears to work:

    [JsonProperty("type")] 
    [JsonConverter(typeof(StringEnumConverter), 
         converterParameters:typeof(CamelCaseNamingStrategy))]
    public ChartType ChartType { get; }  
    

    As NamingStrategy is a property of the StringEnumConverter it's applied using the converterParameters parameter. This got my desired output. I think an example of this would be useful in Newtonsoft documentation.