1
votes

Comment lire des objets complexes à partir d'un fichier json dans .net core

J'ai un json comme celui-ci à lire en c # mais il affiche null.

Provices.json contient ce json

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

}

contient le fichier de démarrage

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

    }

Voici des modèles c #

 services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
 services.Configure<Provinces>(Configuration.GetSection("Provinces"));

Voici comment je lis ce fichier qui me donne des valeurs nulles

{
   "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
          }
    ]
  }
}

Je lis aussi AppSettings.json qui fonctionne bien mais province.json ne fonctionne pas. Pouvez-vous s'il vous plaît dire ce que j'ai fait


4 commentaires

vous vouliez dire qu'ici aucune valeur ne vient "_states = states"?


Oui. aucune valeur dans les états. Le compte est nul


Vous prenez la section Provinces dans votre démarrage, essayez de l'ajouter en tant que fichier séparé comme celui-ci ".AddJsonFile (" Provinces.json ")


Au lieu de le faire en tant que fichier séparé, vous pouvez les placer dans le fichier de configuration, puis prendre la section de la configuration comme ci-dessus votre code, puis cela fonctionnera.


4 Réponses :


1
votes
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJson(yourconfigSetting.json optional: true, reloadOnChange: true)
.AddJsonFile("Provinces.json", optional: true, reloadOnChange: true)
.Build();
If you call as separate file like this then it will come, or else you can add the contents of Provinces to your appconfig json file and get it as section for that your current code will work.

1 commentaires

Non, ça ne marche pas. De plus, si j'ajoute ce tableau dans les paramètres d'applications, cela ne fonctionne pas non plus. Il y a autre chose qui ne va pas



0
votes

J'ai mon problème.

Eh bien, la réponse était de type.

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

En commentant ces lignes, cela a commencé à fonctionner.

La deuxième erreur est d'ajouter un fichier json dans Program.cs [.net core version 2.0]


0 commentaires

0
votes

Ce qui est observé, certains des champs sont manquants pour les rendre Nullable comme DisplayOrder par exemple json ne se charge pas à cause de la propriété null.

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

    }

Remarque: la propriété de chaîne attendue, pas besoin de la rendre nulle, le type de paramètre reste nous devons le rendre nul et si vous êtes sûr que la propriété contient également valeur alors pas besoin de lui faire un paramètre nul.


0 commentaires

1
votes

Vous avez à la fois Published et DisplayOrder déclarés comme bool mais dans le fichier, les valeurs sont:

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

De plus, lorsque vous lisez vos valeurs dans données dans le code ci-dessous, vous renvoyez une nouvelle liste vide. Vous devez renvoyer des données à la place.

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


0 commentaires