使用System.Text.Json反序列化ConsoleColor字典列表时出现异常
问题原因及修复方案
错误原因
你在序列化时通过JsonStringEnumConverter(JsonNamingPolicy.CamelCase)将ConsoleColor枚举转换为驼峰格式的字符串(比如Blue变成blue),但反序列化时没有配置相同的转换器。System.Text.Json默认无法将JSON中的字符串键/值自动映射到ConsoleColor枚举,尤其是驼峰格式的字符串与枚举的帕斯卡命名不匹配,即使开启PropertyNameCaseInsensitive也无法解决字典键的枚举转换问题。
修复方法
在反序列化的JsonSerializerOptions中添加同样的JsonStringEnumConverter配置,确保序列化和反序列化的规则一致:
修改后的反序列化代码:
string json = File.ReadAllText(filePath); var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true, Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; this.colours = JsonSerializer.Deserialize<List<Dictionary<ConsoleColor, ConsoleColor>>>(json, options);
说明
添加JsonStringEnumConverter(JsonNamingPolicy.CamelCase)后,转换器会自动将JSON中的驼峰字符串(如"blue")映射到对应的ConsoleColor枚举值(ConsoleColor.Blue),同时保留JSON文件的人类可读特性,完全符合你需要可编辑文本格式的需求。
内容的提问来源于stack exchange,提问作者Plunder Bunny
相关产品推荐
相关产品推荐

