我有一个C# .Net核心控制台应用程序,它应该检查不同的日志文件,如果这些包含错误,并通过电子邮件通知正确的人。该应用程序有一个appsetting.json,看起来像这样:
{
"Programs": [
{
"name": "program 1",
"LoggingPath": "C:\...",
"Emails": [
"person1@company.com",
"person2@company.com",
"person3@company.com"
]
},
{
"name": "program 2",
"LoggingPath": "C:\...",
"Emails": [
"person1@company.com",
"person2@company.com",
"person3@company.com"
]
}
]
}
现在我想把这个Json转换成一个C#对象列表,以迭代不同的程序,并做我的日志分析等。
我使用https://json2csharp.com将Json转换为以下C#代码:
public class Program
{
public string name { get; set; }
public string LoggingPath { get; set; }
public List<string> Emails { get; set; }
}
public class Root
{
public List<Program> Programs { get; set; }
}
初始化appsettings.json和反序列化的代码如下所示:
public static void Main(string[] args)
{
IConfiguration configuration;
configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
JToken JtokenConfig = Serialize(configuration);
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(JtokenConfig.ToString());
}
但当我尝试这个我得到以下错误:
发生序列化异常:'无法将当前JSON对象(例如{“name”:“value”})反序列化为类型“System.Collections.Generic.List' 1[LogAnalyzer.Model+Program]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或者更改反序列化的类型,使其成为可以从JSON对象反序列化的普通.NET类型(例如,不是像整数这样的基元类型,也不是像数组或列表这样的集合类型)。还可以将JsonObjectAttribute添加到该类型中,以强制其从JSON对象反序列化。
我无法将Json更改为数组(没有“Programs”:),因为appsettings.json构建器需要对象而不是数组。
我还尝试使用此Json来摆脱数组,并使用动态C#属性来反序列化不同的对象名称,但反序列化也失败了。
{
"Programs": {
"program 1": {
"LoggingPath": "test",
"Emails": [
"person1@company.com",
"person2@company.com",
"person3@company.com"
]
},
"program 2": {
"LoggingPath": "test",
"Emails": [
"person1@company.com",
"person2@company.com",
"person3@company.com"
]
}
}
}
我阅读了无数的stackoverflow线程和其他网站,但无法将JSON转换为C#列表。
我希望这里有人能帮助我或给予我一个提示。
1条答案
按热度按时间62lalag41#
您可以安装Microsoft.Extensions.Configuration.Binder Nuget软件包并尝试以下代码
更新
可以反序列化为字典第二个JSON