c# - 如何将 JSON 文件读入指定值的字符串并使用 System.Text.Json?
问题描述
我有一个带有 SQL Server 连接的 .Net Core 3.1 控制台应用程序(不是 ASP.NET Core),其中连接字符串存储在 appsettings.json 文件中
{"ConnectionStrings": { "DefaultConnection":"Server=sqlserver;Database=appDb;User=username;Password=password;" }}
以前我使用 Json.Net 读取字符串
var connString = JObject.Parse(File.ReadAllText("appsettings.json")).GetValue("ConnectionStrings").SelectToken("DefaultConnection").ToString()
它工作得很好。现在我决定切换到 System.Text.Json 库并遇到动态反序列化问题。以下代码引发异常:
var dict = JsonSerializer.Deserialize<Dictionary<string, string[]>>("appsettings.json");
System.Text.Json.JsonException:''a' 是一个无效的值开始。路径:$ | 行号:0 | BytePositionInLine:0。内部异常 JsonReaderException:“a”是值的无效开始。行号:0 | 字节位置内线:0。
然后我会从字典中读取指定 Where Key ==“ConnectionStrings”,然后是字符串数组的后续值 ==“DefaultConnection”。由于异常,我还没有达到那个点,所以我还没有计划如何从字典中阅读。
如何使用新的 System.Text.Json 库从 appsettings.json 文件中读取连接字符串?反序列化为正确Dictianory<string, string[]>
吗?还是使用会更好Dictianory<string, Dictianory<string, string>>
?
解决方案
JsonSerializer.Deserialize
需要一个 JSON 字符串,而不是文件名。
您需要将文件加载到字符串中,然后将其传递给Deserialize
方法:
var json = File.ReadAllText("appsettings.json");
var dict = JsonSerializer.Deserialize<Dictionary<string, string[]>>(json);
推荐阅读
- ios - 为什么从数组绑定对象时子视图会显示旧数据?
- python - XGBClassifier 中的 'objective' = 'binary:logitraw' 是什么?
- javascript - Html 表格到 Excel 导出脚本显示错误“缺少关闭引号”
- android - 无法访问类“android.widget.fragment”。检查您的模块类路径是否存在缺失或冲突的依赖项
- mysql - 使用 CTE 在时间戳查询上创建索引
- android - 如果我在 onResource 准备好新的 Glide 下载,我应该下载两次还是只下载一次?
- amazon-web-services - 如何在 zsh 中为多个键值导出设置一个导出名称(基于环境)?
- python - python selenium中的StaleElementReferenceException
- c# - 标签转换返回错误“输入字符串的格式不正确。”
- spring - 如何在 Spring 中的 Mongo 和 Elastic Search 之间共享的实体中使用像 @Transient 这样的通用注释?