并非所有使用NewtonsoftJson的节点都可以进行反序列化



我正在使用Newtonsoft.Json对Json字符串进行反序列化,可以在这里找到。在反序列化之后,我在数据对象的JSON字符串中只看到预期的480个节点中的53个。我做错了什么?

using (System.IO.StreamReader sr = new System.IO.StreamReader(ReceiveStream, Encoding.UTF8))
{
String content = sr.ReadToEnd();
//var results = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(content);
Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(content);
var file = Newtonsoft.Json.Linq.JObject.Parse(content);
var data = file["data"];
foreach (var station in data)
{
foreach (var date in station)
{
string s_station = date.Path.ToString();
s_station = s_station.Replace("data.", "");
int s_station_int = Convert.ToInt32(s_station);
foreach (var line in date)
{
var values = line.First;
string component_id = values[0].ToString();
string scope_id = values[1].ToString();
string value = values[2].ToString();
string date_end = values[3].ToString();
string index_qual = values[4].ToString();
double value_dbl = Convert.ToDouble(value);
double index_qual_dbl = Convert.ToDouble(index_qual);
int component_id_int = Convert.ToInt32(component_id);
int scope_id_int = Convert.ToInt32(scope_id);
UBA_values_List.Add(new UBADE_air_values_obj(date_end, component_id_int, scope_id_int, value_dbl, index_qual_dbl, s_station_int));
}
}
}
}

问题是,对于JSON中的某些工作站,values[2]values[4]为空。第一个这样的站是260,它是列表中的第54个站。您正试图将这些值解析为double,但double不能为null,因此它抛出了一个异常。我的灵力告诉我,上面的代码在try/catch中,而catch块可能是空的。因此,在出现异常之前,列表中只填写了前53个电台。

您需要修复您的代码,以便它能够处理可能的null值。不要使用Convert.ToDouble(),而是使用double.TryParse(),它会告诉您转换是否成功。如果没有成功,您可以放弃坏数据,也可以设置默认值。

相关内容

最新更新