在自定义类中,我有一个泛型字典,它具有值类型的枚举类型。请注意,枚举类型不受我的控制(第三方程序集的一部分)。
当我使用Newtonsoft序列化这样的对象时,枚举被写为整数。
如何将枚举序列化为字符串?
我尝试在属性上使用StringEnumConverter
,但它仅适用于属性本身,而不是在使用泛型时。由于enum是在外部程序集中声明的,我无法直接在枚举上应用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
}
}
答案 0 :(得分:1)
你可以试试这个
var data = new Data();
data.ExtendedData.Add("First", Foo.Val1);
data.ExtendedData.Add("Second", Foo.Val2);
var json = JsonConvert.SerializeObject(data, new StringEnumConverter());