这是我第一次尝试使用 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
}
我错过了什么,项目列表返回空?
如果你想反序列化 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
列表