我正在处理人口普查数据,而我的json的网址是:
http://api.census.gov/data.json
从上面的json我想构建“标题”的下拉列表,其中“c_dataset”具有“acs5”。现在我的MVC控制器中的代码如下:
var yourObject = new JavaScriptSerializer().Deserialize<dynamic>(result.ToString());
foreach (KeyValuePair<string, object> currency in yourObject)
{
if (currency.Key == "dataset")
{
foreach (KeyValuePair<string, object> cur in currency.Value)
{
}
}
}
最内层的foreach给了我一个错误,“foreach语句不能对变量类型'对象'进行操作,因为'object'不包含'GetEnumerator'的公共定义!!我不能反序列化某个类中的对象,因为这个json很大。有什么可能是最好的方法呢?另外,我想知道我是否可以使用LINQ查询反序列化对象。提前感谢。
答案 0 :(得分:1)
我认为你最好的选择是建立只有你想要的属性的具体类型,忽略其他一切。然后,JSON解串器将忽略额外的&#34;噪声&#34;并且只读取您指定的属性。
// not tested
class CensusDataSet
{
[JsonProperty("c_dataset")]
public string[] CDataset { get; set; }
[JsonProperty("title")]
public string Title { get; set; }
}
class CensusData
{
[JsonProperty("dataset")]
public CensusDataSet[] DataSets { get; set; }
}
...
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<CensusData>(content);
foreach (var dataSet in data.DataSets) ...
顺便说一下,你的头衔是误导性的:你要做的事情叫做 de 序列化。