C# 如何从.NETCore中的json文件中读取复杂对象

C# 如何从.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,

我有一个类似这样的json可以在c#中读取,但它显示为null

provides.json包含此json

{
   "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>(); 
    }