当返回数据集未知时,在c#中反序列化JSON

时间:2016-06-22 18:00:42

标签: c# json linq asp.net-mvc-4 serialization

我正在处理人口普查数据,而我的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查询反序列化对象。提前感谢。

1 个答案:

答案 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 序列化。