Basé sur le commentaire sans réponse de Diego sous la réponse la plus votée dans cette question:
JSON sérialisation d'enum en tant que chaîne
Donc pour un énoncé:
public enum ContactType { Phone = 0, Email = 1, Mobile = 2 }
Et pour par exemple. une propriété:
//could contain ContactType.Phone, ContactType.Email, ContactType.Mobile IEnumerable<ContactType> AvailableContactTypes {get;set;}
À quelque chose comme le JSON:
{ContactTypes : ['Phone','Email','Mobile']}
au lieu de
{ContactTypes : [0,1,2]}
Comme c'est le cas avec le JavaScriptSerializer normal?
J'ai toujours trouvé plus facile d'ajouter une propriété supplémentaire dans ces cas que d'essayer de modifier le comportement de l'analyseur json.net.
[JsonIgnore] IEnumerable<ContactType> AvailableContactTypes {get;set;} IEnumerable<string> AvailableContactTypesString { get { return AvailableContactTypes.Select(c => c.ToString()); } }
Bien sûr, si vous avez besoin de désérialiser, vous devriez également avoir besoin d'un setter sur cette propriété.
set { AvailableContactTypes = value .Select(c => Enum.Parse(typeof(ContactType), c) as ContactType); }
Il semblerait que, dans l'une des versions ultérieures de Json.NET, il existe une disposition appropriée pour cela, via la propriété ItemConverterType
de l'attribut JsonProperty
, comme documenté ici:
http://james.newtonking.com/archive/2012/05/08/json-net-4-5-release-5-jsonproperty-enhancements.aspx
Je n'ai pas pu l'essayer car j'ai frappé les problèmes de mise à niveau de Json.NET 3.5 qui étaient liés à mon propre projet. En fin de compte, j'ai converti mon modèle de vision en IEnumerable<string>
selon la suggestion de Shmiddty (il y a encore une incompatibilité d'impédance et je reviendrai pour refactoriser cela à l'avenir).
J'espère que cela aidera quelqu'un d'autre avec le même problème!