首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将C#枚举定义序列化为Json

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

Stack Overflow用户
提问于 2013-02-08 23:42:44
回答 2查看 8.1K关注 0票数 23

给定C#中的以下内容:

代码语言:javascript
复制
[Flags]
public enum MyFlags {
  None = 0,
  First = 1 << 0,
  Second = 1 << 1,
  Third = 1 << 2,
  Fourth = 1 << 3
}  

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

代码语言:javascript
复制
{
  "MyFlags": {
    "None": 0,
    "First": 1,
    "Second": 2,
    "Third": 4,
    "Fourth": 8
  }
}

目前我正在使用下面的例程,有没有更好的方法呢?

代码语言:javascript
复制
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();
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-08 23:46:34

最好填充Dictionary<string,int>或类型化的DTO并序列化它们。

票数 6
EN

Stack Overflow用户

发布于 2013-02-09 00:22:29

代码语言:javascript
复制
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。我只需要做一些包装来添加类型名称。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14776177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档