2014-10-15 24 views
8

kullanarak farklı özellik adına Çeteleler seri hale getirmek nasılJson.NET

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

Ben üzere numaralandırma listesini seri hale getirmek istiyoruz, bu özelliğiyle şu enum

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

ve sınıf var dizelerin listesi ve bu seri hale getirme listesi, PropertyName ("can_swim" gibi) içinde belirtilen dizeyi, özelliğin "PermissionToSwim" yerine yerine kullanır. Ben JsonConvert.SerializeObject istediğim zaman Ancak, ben yerine

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

ile bitirmek benim

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

başka kelimeye seri, benim kodunda kullanılmak üzere ifadeyi "PermissionToSwim" tutmak istiyorum

istenen . Bunu nasıl başarabileceğime dair bir fikrin var mı? Bağırsak, ek açıklamaların suçlu olduğunu söylüyor, ancak doğru olanı bulamadım. Bu çalışmayı EnumMember attribute (System.Runtime.Serialization içinde) kullanarak yapabilirsiniz.

+0

Gelecekte herhangi birinin karşı konuya sahip olması durumunda (farklı adlandırılmış değerlere sahip bir diziye serpiştirme), [bu soru] 'ya bakın (http://stackoverflow.com/questions/7799769/parsing-an-enumeration -in-json net). – pghprogrammer4

cevap

13

Looks like O özellik kullanırsanız

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

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

da listede JsonProperty özelliğinde ItemConverterType ayarlamak gerekmez.

+0

Mükemmel, teşekkürler! Bunu daha önce görmüştüm ama bir System.Runtime.Serialization notu olduğu için json.net ile çalışmayacağını düşündüm. Az Biliyor muydunuz ... – pghprogrammer4

+0

Bu benim için çalıştı, ancak son yorumunuzla ilgili olarak, hala StringEnumConverter kullanmam gerekiyordu - aksi takdirde, tamsayılara serpiştirmek için geri döndü. – Gyromite