我必须反序列化以下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
。
答案 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创建课程。