C# 如何从.NETCore中的json文件中读取复杂对象
我有一个类似这样的json可以在c#中读取,但它显示为null provides.json包含此jsonC# 如何从.NETCore中的json文件中读取复杂对象,c#,.net,.net-core,asp.net-core-mvc,appsettings,C#,.net,.net Core,Asp.net Core Mvc,Appsettings,我有一个类似这样的json可以在c#中读取,但它显示为null provides.json包含此json { "Provinces": { "States": [ { "CountryId": 1, "Name": "AA (Armed Forces Americas)", "Abbreviation": null, "Published": false,
{
"Provinces": {
"States": [
{
"CountryId": 1,
"Name": "AA (Armed Forces Americas)",
"Abbreviation": null,
"Published": false,
"DisplayOrder": 0,
"Country": null,
"Id": 1
},
{
"CountryId": 1,
"Name": "AE (Armed Forces Europe)",
"Abbreviation": null,
"Published": false,
"DisplayOrder": 0,
"Country": null,
"Id": 54
}
]
}
}
启动文件包含
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.Configure<Provinces>(Configuration.GetSection("Provinces"));
services.Configure(Configuration.GetSection(“AppSettings”);
services.Configure(Configuration.GetSection(“省”));
这是c#models
公共类省份
{
公省()
{
this.States=新列表();
}
公共列表状态{get;set;}
}
公共阶级国家
{
public int CountryId{get;set;}
公共字符串名称{get;set;}
公共字符串缩写{get;set;}
公共bool已发布{get;set;}
公共bool显示顺序{get;set;}
公共字符串国家{get;set;}
公共int Id{get;set;}
}
这就是我读取这个文件的方式,它给我空值
public class UserService
{
public UserService(IOptions<AppSettings> appSettings,
IOptions<Provinces> states)
{
_appSettings = appSettings;
_states = states;
}
//Getting value from json
public List<State> GetStates()
{
var data = this._states.Value.States; // Zero count shows here
return new List<State>();
}
}
公共类用户服务
{
公共用户服务(IOPS)应用程序设置,
(美国)
{
_appSettings=appSettings;
_国家=国家;
}
//从json获取价值
公共列表GetStates()
{
var data=this.\u states.Value.states;//此处显示零计数
返回新列表();
}
}
我也在阅读AppSettings.json,它工作正常,但province.json不工作。你能告诉我哪里出了问题吗
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJson(yourconfigSetting.json optional: true, reloadOnChange: true)
.AddJsonFile("Provinces.json", optional: true, reloadOnChange: true)
.Build();
如果您像这样作为单独的文件调用,那么它就会出现,或者您可以将省的内容添加到appconfig json文件中,并将其作为部分获取,这样您当前的代码就可以工作了。我遇到了问题
嗯,答案是打字的
"CountryId": 1,
"Name": "AE (Armed Forces Europe)",
// "Abbreviation": null,
// "Published": false,
//"DisplayOrder": 0,
// "Country": null,
"Id": 54
在对这些行进行注释后,它开始工作
第二个错误是在Program.cs[.net core version 2.0]中添加json文件。根据观察,缺少一些字段,使其与DisplayOrder一样可为null,例如,由于null属性,json未加载
public class State
{
public int CountryId { get; set; }
public string Name { get; set; }
public string Abbreviation { get; set; }
public bool Published { get; set; }
public bool DisplayOrder { get; set; }
public string Country { get; set; }
public int Id { get; set; }
}
注意:Expect string属性无需将其设置为null,rest类型的参数我们需要将其设置为null,如果您确定属性也包含值,则无需将其设置为null参数。您已经发布了
和DisplayOrder
声明为bool
,但在文件中,值是:
"Published": false,
"DisplayOrder": 0,
此外,当您将值读入下面代码中的数据时,您将返回一个新的空列表。您需要返回数据
public List<State> GetStates()
{
var data = this._states.Value.States; // Zero count shows here
return new List<State>();
}
public List GetStates()
{
var data=this.\u states.Value.states;//此处显示零计数
返回新列表();
}
您的意思是说这里没有正确的值“\u states=states”?是的。在状态中没有值。计数为零如果在启动时将省作为一个部分,请尝试将其作为单独的文件添加,如“.AddJsonFile”(“provides.json”)你可以将它们放在配置文件中,而不是作为单独的文件进行操作,然后从配置中获取部分,如上面的代码,这样它就可以工作了。不,它不工作。此外,如果我在appsettings中添加此数组,那么这也不工作。还有其他一些错误
public List<State> GetStates()
{
var data = this._states.Value.States; // Zero count shows here
return new List<State>();
}