将C#枚举定义序列化为Json

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
}

ServiceStack.Text中是否有任何现有的方法可以序列化到以下JSON?

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。我只需要做一些包装就可以在上面添加类型名。


最好是填充一个Dictionary或一个键入的DTO并将其序列化。