我遇到了JSON反序列化对象的问题。我得到了这个json:
{
"status": "ok",
"message": "OK",
"clientData": {
"id": 1,
"properties": {
"imie": "xxx",
"nazwisko": "xxxx",
"tel": "5121211",
"email": "woeee@wwww",
"pesel": "1111111",
"kod_pocztowy": "2222",
"miejscowosc": "eeee",
"kwota_wnioskowana": 1,
"dochod": 11,
"bik": null,
"firma_nip": "1",
"komornik": null,
"oddluzanie": null,
"leadID": "I1"
},
"subcategories": {
"67": 2001,
"69": 2003
}
},
"linksData": {
"3": {
"linkId": 574,
"link": "ddd",
"kartaPryw": 1,
"produktNazwa": "xxx",
"alternatives": {
"114": {
"linkId": 114,
"link": "xxx",
"kartaPryw": 1
},
"513": {
"linkId": 513,
"link": "xxx",
"kartaPryw": 1
},
"532": {
"linkId": 532,
"link": "xxx",
"kartaPryw": 1
}
}
},
"12": {
"linkId": 33,
"link": "wwww",
"kartaPryw": 0,
"produktNazwa": "ee",
"alternatives": {
"38": {
"linkId": 38,
"link": "wwww",
"kartaPryw": 0
},
"40": {
"linkId": 40,
"link": "qqqq",
"kartaPryw": 0
},
"665": {
"linkId": 665,
"link": "wwww",
"kartaPryw": 0
}
}
},
"14": {
"linkId": 116,
"link": "ww",
"kartaPryw": 0,
"produktNazwa": "w",
"alternatives": {
"123": {
"linkId": 123,
"link": "ffff",
"kartaPryw": 0
},
"124": {
"linkId": 124,
"link": "ffff",
"kartaPryw": 0
},
"517": {
"linkId": 517,
"link": "wwww",
"kartaPryw": 0
},
"519": {
"linkId": 519,
"link": "ffff",
"kartaPryw": 0
}
}
},
"17": {
"linkId": 404,
"link": "ffff",
"kartaPryw": 0,
"produktNazwa": "ee",
"alternatives": []
},
"26": {
"linkId": 135,
"link": "eeee",
"kartaPryw": 0,
"produktNazwa": "eee",
"alternatives": []
},
"27": {
"linkId": 790,
"link": "eeee",
"kartaPryw": 0,
"produktNazwa": "ee",
"alternatives": {
"792": {
"linkId": 792,
"link": "eeeee",
"kartaPryw": 0
}
}
},
"34": {
"linkId": 778,
"link": "eee",
"kartaPryw": 0,
"produktNazwa": "eee",
"alternatives": []
}
},
"currentCartNr": 1
}
格式很糟糕,所以请在此处粘贴此代码以便更好地查看:http://json.parser.online.fr/
这是我的课程
public class Client
{
public string Status { get; set; }
public string Message { get; set; }
public Data clientData { get; set; }
public Dictionary<string, linksData> linksData;
public int currentCartNr { get; set; }
}
public class Data
{
public int id { get; set; }
public Dictionary<string, string> properties { get; set; }
public Dictionary<string, int> subcategories { get; set; }
}
public class linksData
{
public int linkId { get; set; }
public string link { get; set; }
public int kartaPryw { get; set; }
public string produktNazwa { get; set; }
public Dictionary<string, alternatives> alternatives;
}
public class alternatives
{
public int linkId { get; set; }
public string link { get; set; }
public int kartaPryw { get; set; }
}
我无法反序列化我的JSON,当我尝试反序列化&#34;替代品&#34;时,我会收到错误。如果我对此public Dictionary<string, alternatives> alternatives;
发表评论,但我需要此字段。它有什么问题?
这就是我反序列化的方式:
var myObject = JsonConvert.DeserializeObject<Client>(get_person);
错误讯息:
无法将当前JSON数组(例如[1,2,3])反序列化为类型System.Collections.Generic.Dictionary`2 [System.String,Linker.Class.alternatives]&#39;因为类型需要JSON对象(例如{&#34; name&#34;:&#34; value&#34;})才能正确反序列化。 要修复此错误,请将JSON更改为JSON对象(例如{&#34; name&#34;:&#34; value&#34;})或将反序列化类型更改为实现集合接口的数组或类型(例如ICollection,IList)就像可以从JSON数组反序列化的List。 JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。
更新
问题解决了。 alternative []被更改为null null并且有效。
答案 0 :(得分:2)
这似乎是你的JSON上的问题(我想说)。 当替代品包含数据时,它是可以的(它将被序列化为字典)但是当它为空时,它会显示:
"alternatives": []
我认为您必须配置解析器,否则将失败。至少在Jackson for Java中这是可配置的。你使用哪一个?我想它也可以配置(也许是Json.NET?)
答案 1 :(得分:1)
我可以看到的问题是你的序列化而不是反序列化。 通过将空值序列化为字典,您不能稍后对其进行反序列化 问题是你从哪里得到你的JSON文件,你是谁在序列化它?如果是这样,您只需要将序列化更改为
var jsonText=JsonConvert.serialize(JsonObject, new JsonSerializerSettings() {NullValueHandling= NullValueHandling.Ignore });
反序列化与您在代码中所做的相同