[英]Can't get data from deserialized Json string
对于为什么我无法访问从Json
字符串反序列化的任何数据,我确实感到困惑。 当我逐步执行该过程时,我可以看到数据在那里,只是无法访问它。
我将数据放入Dictionary<string, object>
,其Count
为2。它包含object{object[]}
(我将其读取为ArrayList
objects
?)和一个带有响应信息的object
。
对于访问ArrayList
的对象所需的响应信息,我不太担心。 我没有这种运气,我的代码如下:
var output = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(await response.Content.ReadAsStringAsync());
我试图使用output["List"]
(列表是对象键)仅获取ArrayList
,并且仍然可以看到内部的所有对象,但仍然无法访问它们。 这可能是一个简单的解决方法,它一直都是,但是我整天都在盯着这个问题,只是无法理解,所以可以用另一双眼睛做。
谢谢
编辑
Json字符串的格式如下:
{"List":[{"Id":1,"intProperty":2,"boolProperty":false},{"Id":2,"intProperty":3,"boolProperty":false},{"Id":4,"intProperty":5,"boolProperty":false}],"ResponseInformation":{Other info here}}
将其反序列化为一个类:
public class ListClass
{
public int Id;
public int IntProperty;
public bool boolProperty;
}
接着
var output = new JavaScriptSerializer().Deserialize<Dictionary<string, ListClass>>(await response.Content.ReadAsStringAsync());
那应该工作!
我想出了一种获取所需信息的漫长方法,如果有人可以看到一种压缩代码的方法,我欢迎您提出建议:)首先,我创建了Currency类
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());
接下来是the的位; 我使用了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);
}
只需两行即可解决!!
var json = response.Content.ReadAsStringAsync().Result;
IList<Currency> output = new JsonSerializer().Deserialize<IList<Currency>>(new JsonTextReader(new StringReader(json)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.