反序列化包含对象列表的 JSON 对象;为嵌套对象返回 Null

问题描述 投票:0回答:1

这是我第一次尝试使用 JSON 反序列化。我已经阅读了 Stackoverflow 上的很多帖子,但没有一个建议的解决方案能够满足我的问题,所以我提前道歉。我创建了以下对象:

public class Item
{
    public int ID { get; set; }
    public int LSum { get; set; }
    public int YSum { get; set; }
    public int TSum { get; set; }
    public int NSum { get; set; }
    public int MemberId { get; set; }
}

public class Something
{
    public int Id { get; set; }
    public string Phone { get; set; }
    public bool ExistingMember { get; set; }
    public IList<Item> Item { get; set; }
}

反序列化 JSON 时,如下所示: 我期望的 JSON 如下:

    {
   "Id":62,
   "Phone":"07",
   "ExistingMember":true,
   "Item":[
      {
         "ID":42,
         "LSum":0,
         "YSum":0,
         "TSum":0,
         "NSum":0,
         "MemberId":12
      }
   ]
}

但是下面的方法就可以了

   some= JsonConvert.DeserializeObject<something>(someResponse);

它打印如下 json: 以下 JSON 是“someResponse”返回的内容,

{
   "Id":62,
   "Phone":"07",
   "ExistingMember":true,
   "Item":null
}

我错过了什么,项目列表返回空?

c# json arraylist json-deserialization
1个回答
1
投票

如果你想反序列化 json 字符串,在你的例子中是

someResponse
变量,那么你做对了。

为了检查您的代码,我创建了一个名为 file.json 的 JSON 文件,并在其上添加了以下内容:

{
  "Id": 62,
  "Phone": "07",
  "ExistingMember": true,
  "Item": [
    {
      "ID": 42,
      "LSum": 0,
      "YSum": 0,
      "TSum": 0,
      "NSum": 0,
      "MemberId": 12
    }
  ]
}

然后下面的代码行获取 JSON 文件的内容(在您的情况下是

someResponse
的内容)并将其反序列化为
Something
类型的 C# 对象:

string jsonFilePath = @"C:\test\file.json";

var some = JsonConvert.DeserializeObject<Something>(File.ReadAllText(jsonFilePath));

然后打印

ID
列表中每个元素的
Item
属性:

foreach(var item in some.Item)
{
    if (item != null)
    {
        Console.WriteLine($"item ID = {item.ID}");
    }               
}

输出:

item ID = 42

所以,

someResponse
很可能没有
Item
,看起来像这样:

{
  "Id": 62,
  "Phone": "07",
  "ExistingMember": true
}

更新:

我也尝试过这样的:

var someResponse = @"{
  'Id': 62,
  'Phone': '07',
  'ExistingMember': true,
  'Item':[
    {
      'ID': 42,
      'LSum': 0,
      'YSum': 0,
      'TSum': 0,
      'NSum': 0,
      'MemberId': 12
    }
  ]
}
";

var some = JsonConvert.DeserializeObject<Something>(someResponse);

并且

some
有一个包含 1 个元素的
Item
列表

© www.soinside.com 2019 - 2024. All rights reserved.