我有这样的网络回复:
[{
"st1": [
"folio1",
"folio2"
],
"st2": [
"folio1"
]
}]
这是我调用我的网络服务器的代码:
var response = await client.GetAsync(uri+"server/getSTFolios/");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var Item = JsonConvert.DeserializeObject<List<ST>>(content);
return Item;
}
这是ST类,用于反序列化我的响应
public class ST
{
private string v;
public ST(string v)
{
this.v = v;
}
public string st { get; set; }
public string location { get; set; }
public string note { get; set; }
public int pk { get; set; }
public List<Folio> folios { get; set; }
public override string ToString()
{
return "ST: " + st;
}
}
但是我无法获得我的对象,我无法反序列化。
我在尝试打印Item.ToString()
System.Collections.Generic.List`1[test2.ST]
这是我的调试器。
_com_error
感谢
答案 0 :(得分:3)
我猜这是因为你试图用
反序列化你的JSON对象var Item = JsonConvert.DeserializeObject<List<ST>>(content);
但是您收到的回复与ST
的版本格式不同。
您正在尝试转换看起来像
的对象{
"st1": ["folio1","folio2"],
"st2": ["folio1"]
}
到这个
public class ST
{
public string st { get; set; }
public string location { get; set; }
public string note { get; set; }
public int pk { get; set; }
public List<Folio> folios { get; set; }
}
他们根本不分享任何财产或任何东西。这就是为什么在调试和悬停在Item
上时,您确实在该列表中看到了一个对象,但所有值都为空。 JsonConvert.DeserializeObject
尝试将您的回复转换为ST
格式,但未找到匹配的属性,只是创建了一个空的ST
。
如果您收到包含多个对象的回复,例如
[{
"st1": ["folio1","folio2"],
"st2": ["folio1"]
},
{
"st1": ["folio1","folio2"],
"st2": ["folio1"]
}]
当鼠标悬停在Item
上时,您将拥有2个满足空值的对象。
您需要让服务器使用看起来像ST
类的对象进行响应。例如,如果您的响应看起来像这样,我认为它会起作用:
[{
"st": "some string",
"location": "some string",
"note": "some string",
"pk": 123,
"folios" :
[{
"pk": 123,
"number": "some string"
},
{
"pk": 123,
"number": "some string"
}]
}]