首页 > 解决方案 > 如何将 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>>

标签: c#json.net-coresystem.text.json

解决方案


JsonSerializer.Deserialize需要一个 JSON 字符串,而不是文件名。

您需要将文件加载到字符串中,然后将其传递给Deserialize方法:

var json = File.ReadAllText("appsettings.json");
var dict = JsonSerializer.Deserialize<Dictionary<string, string[]>>(json);

推荐阅读