C# Десериализация JSON возвращает ноль - PullRequest
0 голосов
/ 16 марта 2020

У меня есть тест файла JSON. json со значениями:

{
    "version": "13.5.3",
    "mas": {"users": [
      {
        "id": 1,
        "name": "John",
        "password": "123",
        "role" : "client"
      }
    ]},
    "jsonDataFile": {
        "created": "2020-02-29T15:05:22+0000",
        "usersCount": 1
    }
}

Иметь этот файл класса:

public class User
{
    public int id { get; set; }
    public string name { get; set; }
    public string password { get; set; }
    public string role { get; set; }
}

public class Mas
{
    public List<User> users { get; set; }
}

public class JsonDataFile
{
    public DateTime created { get; set; }
    public int usersCount { get; set; }
}

public class RootObject
{
    public string version { get; set; }
    public Mas mas { get; set; }
    public JsonDataFile jsonDataFile { get; set; }
}

И этот файл Program.cs:

string fileName = @"somepath\test.json";
Mas mas = JsonConvert.DeserializeObject<Mas>(File.ReadAllText(fileName));

foreach (var item in mas.users)
{
     Console.WriteLine(item.name);
}

Когда я запускаю программу - она ​​возвращает меня deserealize.Mas.users.get вернул null.

Но тот же файл json с «version» и «jsonDataFile» работает хорошо. Где я допустил ошибку?

Ответы [ 3 ]

0 голосов
/ 16 марта 2020

Вам нужно десериализовать до RootObject как,

RootObject result = JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(fileName));
Mas mas = result.mas;
0 голосов
/ 16 марта 2020

Вы можете попробовать ниже код

  String fileString File.ReadAllText(@"test.json");
  JObject ex = JObject.Parse(fileString);
  Mas mas = JsonConvert.DeserializeObject<Mas>(ex["mas"].ToString());

, если вы хотите цельный Root объект

RootObject root = JsonConvert.DeserializeObject<RootObject>(fileString );
0 голосов
/ 16 марта 2020

Вам необходимо десериализовать, используя RootObject в качестве параметра типа:

var result = JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(fileName));

Теперь получите нужные данные:

Mas mas = result.Mas;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...