繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM