如何从.net core中的json文件读取复杂对象

时间:2019-05-30 06:47:54

标签: c# .net .net-core asp.net-core-mvc appsettings

我有一个这样的json可以在c#中读取,但显示为空。

Provices.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"));

这是c#模型

   public class Provinces
    {
        public Provinces()
        {
            this.States = new List<State>();
        }
        public List<State> States { get; set; }
    }

    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; }

    }

这就是我读取此文件的方式,该文件为我提供了空值

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

}

我还在阅读AppSettings.json,它运行正常,但是province.json无法运行。能告诉我我做错了吗

4 个答案:

答案 0 :(得分:1)

您同时将PublishedDisplayOrder声明为bool,但是在文件中,值是:

"Published": false,
"DisplayOrder": 0,

此外,当您在下面的代码中将值读入data时,您将返回一个新的空列表。您需要返回data

public List<State> GetStates()
    {
        var data = this._states.Value.States; // Zero count shows here
        return new List<State>(); 
    }

答案 1 :(得分:0)

var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJson(yourconfigSetting.json optional: true, reloadOnChange: true)
.AddJsonFile("Provinces.json", optional: true, reloadOnChange: true)
.Build();

如果您这样调用一个单独的文件,它将来,否则您可以将Provinces的内容添加到您的appconfig json文件中,并将其作为当前代码可以使用的部分。

答案 2 :(得分:0)

我遇到了问题。

好吧,答案是正确的。

        "CountryId": 1,
        "Name": "AE (Armed Forces Europe)",
       // "Abbreviation": null,
       // "Published": false,
       //"DisplayOrder": 0,
       // "Country": null,
        "Id": 54

在注释掉这些行后,它开始工作。

第二个错误是在Program.cs [.net核心版本2.0]中添加json文件

答案 3 :(得分:0)

观察到的是,缺少某些字段以使它们像DisplayOrder这样可为空。由于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; }

    }

注意:期望字符串属性不需要将其设置为null,其余类型的参数我们需要将其设置为null,如果您确定属性也包含值,则无需将其设置为null参数。