This question already has an answer here:
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?
I've always found it easier to add an additional property in these cases than to try to change the behavior of the json.net parser.
Of course, if you need to deserialize, you'd need a setter on that property as well.
It would appear that in one of the later versions of Json.NET there is proper provision for this, via the
ItemConverterType
property of theJsonProperty
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: