Els*_*nov 0 c# json .net-core system.text.json
我有一个带有 SQL Server 连接的 .Net Core 3.1 控制台应用程序(不是 ASP.NET Core),其中连接字符串存储在 appsettings.json 文件中
{"ConnectionStrings": { "DefaultConnection":"Server=sqlserver;Database=appDb;User=username;Password=password;" }}
Run Code Online (Sandbox Code Playgroud)
以前我使用 Json.Net 读取字符串
var connString = JObject.Parse(File.ReadAllText("appsettings.json")).GetValue("ConnectionStrings").SelectToken("DefaultConnection").ToString()
Run Code Online (Sandbox Code Playgroud)
它工作正常。现在我决定切换到 System.Text.Json 库并遇到动态反序列化问题。以下代码抛出异常:
var dict = JsonSerializer.Deserialize<Dictionary<string, string[]>>("appsettings.json");
Run Code Online (Sandbox Code Playgroud)
System.Text.Json.JsonException: ''a' 是一个无效的值开始。路径:$ | 行号:0 | BytePositionInLine: 0.' 内部异常 JsonReaderException: 'a' 是一个无效的值开始。行号:0 | 字节位置内联:0。
然后我会从指定 Where Key == "ConnectionStrings" 的字典中读取,然后是字符串数组的后续 Value == "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);
Run Code Online (Sandbox Code Playgroud)