Serialize C# Enum Definition to Json
在C中给出以下内容:
1 2 3 4 5 6 7 8 | [Flags] public enum MyFlags { None = 0, First = 1 << 0, Second = 1 << 1, Third = 1 << 2, Fourth = 1 << 3 } |
在
1 2 3 4 5 6 7 8 9 | { "MyFlags": { "None": 0, "First": 1, "Second": 2, "Third": 4, "Fourth": 8 } } |
目前我正在使用下面的程序,有更好的方法吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public static string ToJson(this Type type) { var stringBuilder = new StringBuilder(); Array values = Enum.GetValues(type); stringBuilder.Append(string.Format(@"{{""{0}"": {{", type.Name)); foreach (Enum value in values) { stringBuilder.Append( string.Format( @"""{0}"": {1},", Enum.GetName(typeof(Highlights), value), Convert.ChangeType(value, value.GetTypeCode()))); } stringBuilder.Remove(stringBuilder.Length - 1, 1); stringBuilder.Append("}}"); return stringBuilder.ToString(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static class EnumExtensions { public static string EnumToJson(this Type type) { if (!type.IsEnum) throw new InvalidOperationException("enum expected"); var results = Enum.GetValues(type).Cast<object>() .ToDictionary(enumValue => enumValue.ToString(), enumValue => (int) enumValue); return string.Format("{{ "{0}" : {1} }}", type.Name, Newtonsoft.Json.JsonConvert.SerializeObject(results)); } } |
用字典来做举重。然后使用newtonsoft的json转换为json。我只需要做一些包装就可以在上面添加类型名。
最好是填充一个