2014-10-15 12 views
8

Ho la seguente enumCome serializzare enumerazioni a diverso nome della proprietà utilizzando json.net

public enum PermissionType 
{ 
    [JsonProperty(PropertyName = "can_fly")] 
    PermissionToFly, 
    [JsonProperty(PropertyName = "can_swim")] 
    PermissionToSwim 
}; 

e una classe con questa proprietà

[JsonProperty(PropertyName = "permissions", ItemConverterType = typeof(StringEnumConverter))] 
public IList<PermissionType> PermissionKeynames { get; set; }` 

voglio serializzare l'elenco delle enumerazioni ad un elenco di stringhe e tale elenco di serializzazione utilizza la stringa specificata in PropertyName (come "can_swim") anziché il nome effettivo della proprietà "PermissionToSwim". Tuttavia, ogni volta che io chiamo JsonConvert.SerializeObject, io alla fine con

"permission_keynames":["PermissionToFly","PermissionToSwim"] 

invece del mio desiderato

"permission_keynames":["can_fly","can_swim"] 

voglio mantenere la frase "PermissionToSwim" per l'uso nel mio codice, serializzare ad un'altra parola . Qualche idea su come posso ottenere questo? Il mio istinto dice che l'annotazione è il colpevole, ma non sono stato in grado di trovare quello corretto.

+0

Nel caso in cui qualcuno in futuro abbia il problema opposto (deserializzando un enum con valori con nomi diversi), controlla [questa domanda] (http://stackoverflow.com/questions/7799769/parsing-an-enumeration -in-json-net). – pghprogrammer4

risposta

13

Looks like è possibile eseguire questa operazione utilizzando EnumMember attribute (trovato in System.Runtime.Serialization).

public enum PermissionType 
{ 
    [EnumMember(Value = "can_fly")] 
    PermissionToFly, 

    [EnumMember(Value = "can_swim")] 
    PermissionToSwim 
} 

Se si utilizzano questi attributi si dovrebbe, inoltre, non è necessario impostare il ItemConverterType nell'attributo JsonProperty sulla lista.

+0

Perfetto, grazie! L'ho visto in precedenza ma pensavo che non funzionasse con json.net perché era un'annotazione System.Runtime.Serialization. Non sapevo ... – pghprogrammer4

+0

Questo ha funzionato per me, tranne che per il tuo ultimo commento, avevo ancora bisogno di usare StringEnumConverter - altrimenti, è tornato a deserializzare in interi. – Gyromite

Problemi correlati