无法从反序列化的Json字符串中获取数据

时间:2014-08-14 15:01:12

标签: c# json api serialization arraylist

我真的很困惑为什么我无法访问从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}}

3 个答案:

答案 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)));