C# 如何提高enum JSON文件的可读性?

C# 如何提高enum JSON文件的可读性?,c#,json,C#,Json,我使用JSON文件保存游戏的设置数据。数据中有一些enum类型(Unity project c#)。现在在JSON文件中,我使用integer来表示JSON文件中的enum值 这会导致两个问题。 1、手动编辑JSON文件很痛苦,因为我记不住所有的enum值,我必须返回cs文件查看哪个enum表示什么。(使用enum的目的首先是提高可读性) 2、当我更改enum类(例如在其他旧enum值之前插入新值)时,整个JSON文件都会出错 有什么办法可以解决这个问题吗?谢谢 首先,始终在枚举末尾添加新的枚举

我使用JSON文件保存游戏的设置数据。数据中有一些
enum
类型(Unity project c#)。现在在JSON文件中,我使用integer来表示JSON文件中的
enum

这会导致两个问题。 1、手动编辑JSON文件很痛苦,因为我记不住所有的
enum
值,我必须返回cs文件查看哪个enum表示什么。(使用enum的目的首先是提高可读性) 2、当我更改enum类(例如在其他旧enum值之前插入新值)时,整个JSON文件都会出错


有什么办法可以解决这个问题吗?谢谢

首先,始终在枚举末尾添加新的枚举常量,除非您有很好的理由不这样做。否则,您需要迁移数据/设置以匹配新订单。这应该是一个解决的问题

现在,您还没有指定要使用哪个工具来序列化/反序列化JSON,所以我给您一个使用JSON.NET的示例。此解决方案是序列化枚举常量的文本表示形式,而不是整数值。希望这就是你想要的

public enum GameDifficulty
{
    Easy,
    Normal,
    Difficult,
    Insane
}

public class PlayerSettings
{
    public int ID { get; set; }
    public string Name { get; set; }
    // Should convert between the enum value and a string representation in JSON
    [JsonConverter(typeof(StringEnumConverter))]
    public GameDifficulty Difficulty { get; set; }
}

// Somewhere in your code...
var settings = new PlayerSettings
{
    ID = 1,
    Name = "Bob",
    Difficulty = GameDifficulty.Difficult
};
var json = JsonConvert.SerializeObject(settings);
Console.WriteLine(json);
// Prints:
// {
//   "ID": 1,
//   "Name": "Bob",
//   "Difficulty": "Difficult"
// }

谢谢!我使用JsonUtility,它甚至不支持字典中的任意键。你说的JSON.NET是这个意思吗@艺术我指的是AKA JSON.NET。为了团结,这似乎是感谢你的方式。测试之后,似乎不需要添加事件
[JsonConverter(typeof(StringEnumConverter))]
。它只处理将Json文件中的字符串解析为枚举类型。