淡化 JSON 对象包含对象列表 Returns 嵌套对象为空
Desalinizing JSON Object Contains List of Objects Returns Null for the nested object
这是我第一次尝试使用 JSON 反序列化。我已经阅读了 Whosebug 中的许多帖子,没有建议的解决方案可以解决我的问题,所以我提前道歉。我创建了以下对象:
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"return,
{
"Id":62,
"Phone":"07",
"ExistingMember":true,
"Item":null
}
项目列表 return 为空,我错过了什么?
如果你想反序列化 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));
然后打印 Item
列表的每个元素的 ID
属性:
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
列表
这是我第一次尝试使用 JSON 反序列化。我已经阅读了 Whosebug 中的许多帖子,没有建议的解决方案可以解决我的问题,所以我提前道歉。我创建了以下对象:
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"return,
{
"Id":62,
"Phone":"07",
"ExistingMember":true,
"Item":null
}
项目列表 return 为空,我错过了什么?
如果你想反序列化 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));
然后打印 Item
列表的每个元素的 ID
属性:
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
列表