我真的很困惑为什么我无法访问从Json
字符串反序列化的任何数据。当我逐步完成整个过程时,我可以看到数据存在,我无法访问它。
我将数据放入Dictionary<string, object>
,它的Count
为2.它包含object{object[]}
(我读作ArrayList
objects
带有响应信息的object
。
我对于访问ArrayList
中的对象所需的响应信息并不太感兴趣。我没有这么幸运,我的代码如下:
var output = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(await response.Content.ReadAsStringAsync());
我试图仅使用ArrayList
获取output["List"]
(列表是对象键),仍然可以看到里面的所有对象,但仍然无法访问它们。它可能是一个简单的解决方案,它总是如此,但我一整天都在盯着这个问题,只是不能理解它,所以可以用另一双眼睛。
由于
修改
Json字符串采用以下格式:
{"List":[{"Id":1,"intProperty":2,"boolProperty":false},{"Id":2,"intProperty":3,"boolProperty":false},{"Id":4,"intProperty":5,"boolProperty":false}],"ResponseInformation":{Other info here}}
答案 0 :(得分:0)
将其反序列化为一个类:
public class ListClass
{
public int Id;
public int IntProperty;
public bool boolProperty;
}
然后
var output = new JavaScriptSerializer().Deserialize<Dictionary<string, ListClass>>(await response.Content.ReadAsStringAsync());
这应该有效!
答案 1 :(得分:0)
我已经想出了一个获取我需要的信息的冗长方式,如果有人能看到一种方法来压缩代码,我可以接受建议:) 首先,我创建了我的货币类
public class Currency
{
public int CurrencyId { get; set; }
public int GlobalCurrencyId { get; set; }
public bool Archived { get; set; }
}
接下来,我像我在问题中那样对我的Json进行反序列化
var output = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(await response.Content.ReadAsStringAsync());
接下来是长篇大论;我使用foreach语句来获取output
变量的每个元素。然后明确说明里面的数据是一个字典对象数组,所以我创建了一个Currency类对象列表:
var currencyObject = output["List"];
List<Currency> currencyList = new List<Currency>();
Currency item;
ArrayList myList = currencyObject as ArrayList;
foreach (object element in myList)
{
Dictionary<string, object> L1 = element as Dictionary<string, object>;
item = new Currency();
item.CurrencyId = Convert.ToInt32(L1["CurrencyId"]);
item.GlobalCurrencyId = Convert.ToInt32(L1["GlobalCurrencyId"]);
item.Archived = Convert.ToBoolean(L1["Archived"]);
currencyList.Add(item);
}
答案 2 :(得分:0)
只用两行就知道了!!
var json = response.Content.ReadAsStringAsync().Result;
IList<Currency> output = new JsonSerializer().Deserialize<IList<Currency>>(new JsonTextReader(new StringReader(json)));