JSON序列化 - 将枚举转换为数字

时间:2015-08-18 08:01:56

标签: c# json asp.net-web-api enums typescript

我在C#后端使用枚举定义了设置,每个后端都有唯一的编号。

public enum Settings
{
    Setting1 = 1,
    Setting2 = 2,

    //...
}

我使用字典中的WebAPI将设置发送到客户端

public MyModel
{
    public Dictionary<Settings, string> MySettings { get; set; }

    //...other properties...
}

但问题是我在打字稿中也定义了这个枚举,我想用枚举来引用它。

问题是WebAPI将枚举转换为字符串而不是数字。由于解决方案非常大,我不想从配置中删除StringEnumConverter,只需将转换器定义为此属性的编号,并保留字典的类型,而不是将其更改为Dictionary<int, string>

有没有办法,如何使用属性?

1 个答案:

答案 0 :(得分:1)

你可以拥有一个私人/受保护的财产,你可以使用这种方式 你要。您也可以制作这些标准的get / set方法并将它们公之于众。

public class MyModel
{
    public Dictionary<int, string> MySettings { get; set; }

    //One way of handling it.
    private Dictionary<Settings, string> MyBetterSettings
    {
        get { return MySettings.ToDictionary(setting => (Settings) setting.Key, setting => setting.Value); }
        set { MySettings = value.ToDictionary(setting => (int) setting.Key, setting => setting.Value); }
    }

    //Simple C# 6 methods
    public Dictionary<Settings, string> GetSettings => MySettings.ToDictionary(setting => (Settings) setting.Key, setting => setting.Value);
    public void SetSettings(Dictionary<Settings, string> settings) => MySettings = settings.ToDictionary(setting => (int)setting.Key, setting => setting.Value);
}

这不是最好的,但不必担心改变序列化方式,这是一个很好的权衡。