C# 将JSON反序列化到字典,其中JSON字符串包含空值
我有一个非常简单的类,用于将JSON字符串反序列化到字典中C# 将JSON反序列化到字典,其中JSON字符串包含空值,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我有一个非常简单的类,用于将JSON字符串反序列化到字典中 private static Dictionary<string,string> DeserializeJSON(string json) { var dict = new Dictionary<string,string>(); if (string.IsNullOrEmpty(json)) return dict; var jsDict = JsonConvert.De
private static Dictionary<string,string> DeserializeJSON(string json)
{
var dict = new Dictionary<string,string>();
if (string.IsNullOrEmpty(json))
return dict;
var jsDict = JsonConvert.DeserializeObject<Dictionary<string,string>>(json);
if (jsDict != null)
dict = jsDict;
return dict;
}
以下面的回溯
2014-04-23 01:39:07.212 myapp[63857:70b]哎哟,有什么突然发生了:无法将当前JSON数组(例如[1,2,3])反序列化为类型“System.Collections.Generic.Dictionary`2[System.String,System.String]”,因为该类型需要一个JSON对象(例如{“name”:“value”})才能正确反序列化。
要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”}),或将反序列化类型更改为数组或实现可从JSON数组反序列化的集合接口(例如ICollection、IList)类似列表的类型。还可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组反序列化。
路径“”,第1行,位置1.-位于Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ensurearaycontract(Newtonsoft.Json.JsonReader-reader,System.Type objectType,Newtonsoft.Json.Serialization.JsonContract-contract)[0x00000]in:0
位于Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(Newtonsoft.Json.JsonReader,System.Type objectType,Newtonsoft.Json.Serialization.JsonContract,Newtonsoft.Json.Serialization.JsonProperty成员,System.Object existingValue,System.String id)[0x00000 in:0
位于Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(Newtonsoft.Json.JsonReader阅读器,System.Type objectType,Newtonsoft.Json.Serialization.JsonContract契约,Newtonsoft.Json.Serialization.JsonProperty成员,Newtonsoft.Json.Serialization.JsonContainerContract容器契约,Newtonsoft.Json.Serialization.JsonProperty容器成员,System.Object existingValue)[0x00000]in:0
在Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(Newtonsoft.Json.JsonReader,System.Type objectType,Boolean checkAdditionalContent)[0x00000]中:0
在反序列化JSON字符串时,有没有一种简单的方法可以忽略空值(和键)?它与空值无关。这是因为输入表示一个(值序列),不能直接映射到字典(一组键值对) 尝试使用非空值,您将得到相同的结果 无法反序列化当前JSON数组(例如[1,2,3]),因为[Dictionary]类型需要一个JSON对象(例如{“name”:“value”})才能正确反序列化 可以说,正确的解决方案是获取并解析JSON对象输入。将发布的JSON与此变体进行比较,即使使用空值,也可以进行反序列化
{"ImplementID": null, "ImplementType": "Flexicoil Airseeder", "SeedUnits": "Kg/H"}
但是,如果无法以合理的形式获取JSON,只需将JSON对象反序列化为列表,然后根据需要将列表转换为字典
var data = JsonConvert.DeserializeObject<List<string>>(json);
var dict = new Dictionary<string,string>();
for (var i = 0; i < data.length; i += 2) {
var key = data[i];
var value = data[i+1];
dict[key] = value;
}
var data=JsonConvert.DeserializeObject(json);
var dict=新字典();
对于(变量i=0;i
var data = JsonConvert.DeserializeObject<List<string>>(json);
var dict = new Dictionary<string,string>();
for (var i = 0; i < data.length; i += 2) {
var key = data[i];
var value = data[i+1];
dict[key] = value;
}