在我的C#(V9).NET6应用程序中,我有一个带有以下成员变量的类:

private readonly List<Dictionary<ConsoleColor, ConsoleColor>> colours = new ()
{
    new Dictionary <ConsoleColor, ConsoleColor> (),
    new Dictionary <ConsoleColor, ConsoleColor> ()
};

我把它写在json中,在一个像这样的文件中:

using System.Text.Json;
using System.Text.Json.Serialization;    

var options = new JsonSerializerOptions {
    WriteIndented = true,
    Converters = {
        new JsonStringEnumConverter (JsonNamingPolicy.CamelCase)
    }
};
string json = JsonSerializer.Serialize (this.colours, options);
using StreamWriter stream = File.CreateText (filePath);
stream.Write (json);

但当我试着再读一遍这篇文章时,如下所示:

string json = File.ReadAllText (filePath);
var options = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};
this.colours = JsonSerializer.Deserialize<List<Dictionary<ConsoleColor,ConsoleColor>>> (json,options);

我得到了一个例外:

"无法将JSON值转换为 System.Collections.Generic.Dictionary`2[System.ConsoleColor,系统控制台 colored颜色 ]. 路径:$[0].Blue|线号:2|BytePositionInLine:18.

我做错了什么?Json看起来像一个字符串--异常发生在反序列化(JsonSerializer.是非序列化)时.我认为它可能需要一个 colored颜色 的数字,而不是阅读文本,但我真的希望我的JSON是人类可读的(在必要时,可以编辑).

Json文件如下所示:

[
  {
    "blue": "gray",
    "cyan": "gray",
    "darkBlue": "darkGray",
    "darkCyan": "darkGray",
    "darkGreen": "darkGray",
    "darkMagenta": "darkGray",
    "darkRed": "darkGray",
    "darkYellow": "darkGray",
    "green": "gray",
    "magenta": "gray",
    "red": "gray",
    "yellow": "gray"
  },
  {
    "black": "black",
    "blue": "gray",
    "cyan": "gray",
    "darkBlue": "darkGray",
    "darkCyan": "darkGray",
    "darkGreen": "darkGray",
    "darkMagenta": "darkGray",
    "darkRed": "darkGray",
    "darkYellow": "darkGray",
    "green": "gray",
    "magenta": "gray",
    "red": "gray",
    "yellow": "gray"
  }
]

推荐答案

感谢@stuartd和@dbc--答案是在反序列化时也使用JsonStringEnumConverter.对于上面的代码,我只是添加了:

Converters =
{
    new JsonStringEnumConverter (JsonNamingPolicy.CamelCase)
}

到JsonSerializerOptions中.

Csharp相关问答推荐

EF Core:看不到任何查询日志(log)?

MongoDB实体框架核心:表达必须可写

为什么使用DXGI输出复制和Direct 3D时捕获的图像数据全为零?

为什么在ANTLR4中会出现不匹配的输入错误?""

实体框架核心上是否支持使用NPGSQL的字符串聚合?

WPF DataGrid中的三维数据

Quartz调度程序不调用作业(job)类

如何将ASP.NET Core 2.1(在.NET框架上运行)更新到较新的版本?

附加标题不起作用,而添加则起作用

更改执行目录

集合表达式没有目标类型

将类移动到新命名空间后更新RavenDB Raven-Clr-Type

我什么时候应该在Dapper中使用Connection.OpenAsync?

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

我找不到ASP.NET Web应用程序(.NET框架).已 Select .NET框架项目和项模板以及此组件(&Q;)

C#静态抽象属性不能被子接口覆盖

根据优先级整理合同列表

C#;AvaloniaUI;MVVM;当另一个窗口上的按钮被单击时,如何更新视图图像源?

SqlException:无法打开数据库.升级到Dotnet 8后-数据库兼容性版本-非EFCore兼容性级别

身份验证中间件如何处理多个方案