复杂的json反序列化

时间:2013-03-18 12:05:00

标签: c# json

我必须反序列化以下json响应(Result列表具有可变长度):

{
    "ResultSet": {
        "Query": "volkswagen",
        "Result": [
            {
                "symbol": "VLKAY",
                "name": "Volkswagen AG",
                "exch": "PNK",
                "type": "S",
                "exchDisp": "OTC Markets",
                "typeDisp": "Equity"
            },
            {
                "symbol": "VOW3.DE",
                "name": "Volkswagen AG",
                "exch": "GER",
                "type": "S",
                "exchDisp": "XETRA",
                "typeDisp": "Equity"
            },
            {
                "symbol": "VOW.DE",
                "name": "Volkswagen AG",
                "exch": "GER",
                "type": "S",
                "exchDisp": "XETRA",
                "typeDisp": "Equity"
            }
        ]
    }
}

我得到了什么:

JavaScriptSerializer js = new JavaScriptSerializer();
string jsonString = "...String is here...";
SearchObj obj = js.Deserialize<SearchObj>(jsonString);

据我所知,我通常需要创建一个合适的obj。例如SearchObj会被填满,但在这种情况下,我不完全确定这个对象应该是什么样子。我提出了:

class Data 
{
    public string symbol { get; set; }
    public string name { get; set; }
    public string exch { get; set; }
    public string type { get; set; }
    public string exchDisp { get; set; }
    public string typeDisp { get; set; }
}

class Container 
{
    public string Query { get; set; }
    public List<Data> Result { get; set; }
}

class SearchObj
{
    public Container ResultSet { get; set; }
}

但是猜猜看,它不起作用,我只得到ResultSet = null

3 个答案:

答案 0 :(得分:1)

尝试将您的类Container更改为

 class Container 
 {
     public string Query { get; set; }
     public Data[] Result { get; set; }
 } 

我没有根据我的观察测试它

答案 1 :(得分:1)

当我回答自己的问题时,我总是感觉很糟糕,但现在就这样了。

基本上我的想法是正确的,我只犯了一个错误,那就是我不需要

class SearchObj
{
    public Container ResultSet { get; set; }
}

使用

Container obj = js.Deserialize<Container>(jsonString);

而不是

SearchObj obj = js.Deserialize<SearchObj>(jsonString);

成功了。容器中的Data[]List<Data>都工作。

编辑: 从giammins的评论来看,它似乎在没有这种改变的情况下在某些机器上运行,但我想这是未定义行为的一种情况。

答案 2 :(得分:0)

您可以使用http://www.json2charp.com创建课程。

相关问题