使用Newtonsoft C#从json转换为Enum

我如何将json反序列化为C#中的枚举列表?

我写了以下代码:

//json "types" : [ "hotel", "spa" ] public enum eType { [Description("hotel")] kHotel, [Description("spa")] kSpa } public class HType { List m_types; [JsonProperty("types")] public List HTypes { get { return m_types; } set { // i did this to try and decide in the setter // what enum value should be for each type // making use of the Description attribute // but throws an exception } 

}}

  //other class var hTypes = JsonConvert.DeserializeObject(json); 

自定义转换器可能有帮助。

 var hType = JsonConvert.DeserializeObject( @"{""types"" : [ ""hotel"", ""spa"" ]}", new MyEnumConverter()); 

 public class HType { public List types { set; get; } } public enum eType { [Description("hotel")] kHotel, [Description("spa")] kSpa } public class MyEnumConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType == typeof(eType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var eTypeVal = typeof(eType).GetMembers() .Where(x => x.GetCustomAttributes(typeof(DescriptionAttribute)).Any()) .FirstOrDefault(x => ((DescriptionAttribute)x.GetCustomAttribute(typeof(DescriptionAttribute))).Description == (string)reader.Value); if (eTypeVal == null) return Enum.Parse(typeof(eType), (string)reader.Value); return Enum.Parse(typeof(eType), eTypeVal.Name); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } }