Search code examples
javascriptjson.netjavascriptserializer

How do you serialize an enum array to a Json array of strings?


Based on Diego's unanswered comment under the top-voted answer in this question:

JSON serialization of enum as string

So for an enum:

public enum ContactType
{
    Phone = 0,
    Email = 1,
    Mobile = 2
}

And for eg. a property:

//could contain ContactType.Phone, ContactType.Email, ContactType.Mobile
IEnumerable<ContactType> AvailableContactTypes {get;set;} 

To something like the JSON:

{ContactTypes : ['Phone','Email','Mobile']}

instead of

{ContactTypes : [0,1,2]}

As is the case with the normal JavaScriptSerializer?


Solution

  • It would appear that in one of the later versions of Json.NET there is proper provision for this, via the ItemConverterType property of the JsonProperty attribute, as documented here:

    http://james.newtonking.com/archive/2012/05/08/json-net-4-5-release-5-jsonproperty-enhancements.aspx

    I was unable to try it out as I hit problems upgrading from Json.NET 3.5 that were related to my own project. In the end I converted my viewmodel to IEnumerable<string> as per Shmiddty's suggestion (there is still an impedance mismatch though and I will come back to refactor this in future).

    Hope that helps anyone else with the same problem!

    Example usage:

    [JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
    IEnumerable<ContactType> AvailableContactTypes {get;set;}