簡體   English   中英

將C#枚舉定義序列化為Json

[英]Serialize C# Enum Definition to Json

在C#中給出以下內容:

[Flags]
public enum MyFlags {
  None = 0,
  First = 1 << 0,
  Second = 1 << 1,
  Third = 1 << 2,
  Fourth = 1 << 3
}  

ServiceStack.Text是否存在用於序列化為以下JSON的現有方法?

{
  "MyFlags": {
    "None": 0,
    "First": 1,
    "Second": 2,
    "Third": 4,
    "Fourth": 8
  }
}

目前我正在使用下面的例程,有沒有更好的方法來做到這一點?

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();
    }
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<string,int>或Typed DTO並序列化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM