簡體   English   中英

C#反序列化JSON返回null

[英]C# Deserialize JSON returns null

我有一個帶有值的 JSON 文件 test.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。

但是沒有“版本”和“jsonDataFile”的相同json文件效果很好。 我在哪里做錯了?

您需要使用 RootObject 作為類型參數進行反序列化:

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

現在獲取您想要的數據:

Mas mas = result.Mas;

您需要反序列化為RootObject 之類的,

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

你可以試試下面的代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM