2014-10-15 11 views
8

Ich habe folgende EnumWie Aufzählungen unterschiedliche Eigenschaftsnamen zur Serialisierung json.net mit

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

und eine Klasse mit dieser Eigenschaft

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

ich die Liste der Aufzählungen ein serialisieren möge Liste der Zeichenfolgen und diese Serialisierungsliste verwenden die Zeichenfolge, die in PropertyName (wie "can_swim") anstelle des tatsächlichen Namens der Eigenschaft "PermissionToSwim" angegeben wird. Jedes Mal, wenn ich JsonConvert.SerializeObject nennen, ich am Ende mit

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

statt meinem

gewünschten
"permission_keynames":["can_fly","can_swim"] 

Ich mag für den Einsatz in meinem Code die Phrase „PermissionToSwim“ halten, serialisiert zu einem anderen Wort . Irgendeine Idee, wie ich das erreichen kann? Mein Bauchgefühl sagt, dass die Anmerkung der Schuldige ist, aber ich konnte nicht den richtigen finden.

+0

Falls jemand in der Zukunft das umgekehrte Problem hat (Deserialisierung zu einer Enumeration mit anders benannten Werten), lesen Sie [diese Frage] (http://stackoverflow.com/questions/7799769/parsing-an-enumeration) -in-json-net). – pghprogrammer4

Antwort

13

Looks like können Sie dies mit der EnumMember attribute (in System.Runtime.Serialization gefunden) arbeiten.

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

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

Wenn Sie diese Attribute verwenden, sollten Sie auch nicht die ItemConverterType im JsonProperty Attribut auf der Liste müssen.

+0

Perfekt, danke! Ich habe das früher gesehen, dachte aber, es würde nicht mit json.net funktionieren, weil es eine System.Runtime.Serialization-Annotation war. Wenig wusste ich ... – pghprogrammer4

+0

Dies funktionierte für mich, außer, in Bezug auf Ihren letzten Kommentar, musste ich noch den StringEnumConverter verwenden - ansonsten ging es wieder zu Deserialisierung zu ganzen Zahlen. – Gyromite

Verwandte Themen