繁体   English   中英

在泛型类中使用枚举类型时,如何将枚举序列化为字符串?

[英]How to serialize enum as string when the enum type is used in a generic class?

在一个自定义类中,我有一个通用字典,该字典具有用于值类型的枚举类型。 请注意,枚举类型不受我的控制(属于第三方程序集)。

当我使用Newtonsoft序列化此类对象时,枚举被写为整数。

如何将枚举序列化为字符串?

我试过在属性上使用StringEnumConverter ,但它仅适用于属性本身,不适用于使用泛型时。 由于枚举是在外部程序集中声明的,因此无法将StringEnumConverter直接应用于枚举。

这是一个复制样本:

输出:

{"ExtendedData":{"First":0,"Second":1}}

代码

using System;
using System.Collections.Generic;

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

public class Program
{
    public static void Main()
    {
        var data = new Data();

        data.ExtendedData.Add("First", Foo.Val1);
        data.ExtendedData.Add("Second", Foo.Val2);

        Console.WriteLine(JsonConvert.SerializeObject(data));
    }

    public class Data{
        private readonly Dictionary<string, Foo> m_ExtendedData = new Dictionary<string, Foo>();

        public Dictionary<string, Foo> ExtendedData {get { return m_ExtendedData ; }}
    }

// !Actually from an external assembly
    public enum Foo{
        Val1,
        Val2
    }
}

你可以试试这个

var data = new Data();

data.ExtendedData.Add("First", Foo.Val1);
data.ExtendedData.Add("Second", Foo.Val2);

var json = JsonConvert.SerializeObject(data, new StringEnumConverter());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM