所以我正在尝试解析看起来有点像这样的JSON请求:
{
"source_code":"MOODY",
"code":"DAAAYLD",
"name":"Aaa Corporate Bond Yield",
"data":[
[
"2015-08-11",
3.96
],
[
"2015-08-10",
4.06
],
[
"2015-08-07",
3.96
]
]
}
还有一些我遗漏的东西,但它们并不重要。现在,我正在使用
var jsonData = JsonConvert.DeserializeObject<JsonResponseObj>(GetRawData(code));
制作一个类似于:
的JsonResponseObjpublic class JsonResponseObj
{
[JsonProperty("name")]
public string name { get; set; }
[JsonProperty("code")]
public string code { get; set; }
[JsonProperty("source_code")]
public string source_code { get; set; }
[JsonProperty("description")]
public string description { get; set; }
[JsonProperty("data")]
public List<List<string>> data { get; set; }
}
如果省略“data”属性,这适用于获取名称,代码等,但是因为数据本身是列表列表(或者如果你想以这样的方式查看它的两元组列表)我不太确定获取它的正确方法是什么。我尝试了一些似乎打破解析器的东西,包括对我来说最明显的一个:
[JsonProperty("data")]
public List<Tuple<string, float>> data { get; set; }
然而,这只会给出错误:
无法将当前JSON数组(例如[1,2,3])反序列化为类型 'System.Tuple`2 [System.String,System.Single]'因为类型 需要一个JSON对象(例如{“name”:“value”})来反序列化 正确。
但实际类型不是JSON对象,因为它没有键/值对,每种类型的“string,float”只有2个值。
有关如何最好地解析数据以获取数据的任何线索?
答案 0 :(得分:3)
好的,所以我发现了一些动态类型,它们不再使用JSON的单独静态对象,而这些对象不适用于嵌套列表字符串。
基本上我用一行代码解决了它:
dynamic jsonData = JsonConvert.DeserializeObject<dynamic>(rawJsonStr);
这意味着我可以直接调用顶级值,并使用JArray迭代&#34;数据&#34;列表如下:
string name = jsonData.name;
string data_code = jsonData.code;
string source_code = jsonData.source_code;
JArray data = jsonData.data;
foreach (var point in data)
{
System.Diagnostics.Debug.WriteLine(point[0] + " | " + point[1]);
}
答案 1 :(得分:0)
问题的存在是因为数据它不是List&gt;,因为每个条目都包含字符串和双元素,因此我可以快速解决此问题,只需将您的类实现为以下。
公共类JsonResponseObj { [JsonProperty(&#34;名称&#34)] 公共字符串名称{get;组; }
[JsonProperty("code")]
public string code { get; set; }
[JsonProperty("source_code")]
public string source_code { get; set; }
[JsonProperty("description")]
public string description { get; set; }
[JsonProperty("data")]
public List<Dictionary<string,double>> data { get; set; }
}