如何将 JSON 文件读入字符串指定值并使用 System.Text.Json?
How to read JSON file into string specifying values and using System.Text.Json?
我有一个带有 SQL 服务器连接的 .Net Core 3.1 控制台应用程序(不是 ASP.NET 核心),连接字符串存储在 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' is an invalid start of a value.
Path: $ | LineNumber: 0 | BytePositionInLine: 0.' Inner Exception
JsonReaderException: 'a' is an invalid start of a value. LineNumber: 0
| BytePositionInLine: 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);
为此,我在 JsonDocument 中使用了 api:
var json = File.ReadAllText("appsettings.json");
var appSettings = JsonDocument.Parse(json, new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip });
var result = appSettings.RootElement.GetProperty("ConnectionStrings").GetProperty("DefaultConnection").GetString();
HTH
我有一个带有 SQL 服务器连接的 .Net Core 3.1 控制台应用程序(不是 ASP.NET 核心),连接字符串存储在 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' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.' Inner Exception JsonReaderException: 'a' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 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);
为此,我在 JsonDocument 中使用了 api:
var json = File.ReadAllText("appsettings.json");
var appSettings = JsonDocument.Parse(json, new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip });
var result = appSettings.RootElement.GetProperty("ConnectionStrings").GetProperty("DefaultConnection").GetString();
HTH