执行AJAX请求时,我收到以下错误:
将值{null}转换为类型'System.Int32'时出错.路径'[5] .tabID',第1行,第331位.
错误发生在我的第二行 processRequest (...)
public void ProcessRequest (HttpContext context) { string strJson = new StreamReader(context.Request.InputStream).ReadToEnd(); Listelements = JsonConvert.DeserializeObject >(strJson); // (...) }
调试器说这个内容strJson
:
[{ "bmk": "132M1", "state": "off", "type": "motor", "tabID": 8 }, { "bmk": "158M1", "state": "off", "type": "motor", "tabID": 8 }, { "bmk": "194M1", "state": "off", "type": "motor", "tabID": 8 }, { "bmk": "198M1", "state": "on", "type": "motor", "tabID": 8 }, { "bmk": "202M1", "state": "off", "type": "motor", "tabID": 8 }, { "bmk": "test-m", "state": "on", "type": "motor", "tabID": null }, { "bmk": "158M1-2", "state": "off", "type": "motor", "tabID": 2 }, { "bmk": "100M1", "state": "on_right", "type": "screwconveyor", "tabID": 8 }, { "bmk": "152M1", "state": "on", "type": "screwconveyor", "tabID": 8 }, { "bmk": "192M1", "state": "on_left", "type": "screwconveyor", "tabID": 8 }, { "bmk": "196M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "2000M1", "state": "on_left", "type": "screwconveyor", "tabID": 8 }, { "bmk": "74M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "76M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "80M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "82M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "86M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "90M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "94M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "95M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "96M1", "state": "off", "type": "screwconveyor", "tabID": 8 }, { "bmk": "102Y1", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "104Y1", "state": "open", "type": "ventile", "tabID": 8 }, { "bmk": "112Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "114Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "120Y1", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "122Y1", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "128Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "146Y1_2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "148Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "156Y1", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "180Y1", "state": "open", "type": "ventile", "tabID": 8 }, { "bmk": "182Y1", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "184Y1", "state": "open", "type": "ventile", "tabID": 8 }, { "bmk": "206Y1", "state": "open", "type": "ventile", "tabID": 8 }, { "bmk": "208Y1", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "72Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "78Y2", "state": "open", "type": "ventile", "tabID": 8 }, { "bmk": "84Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "88Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "92Y2", "state": "closed", "type": "ventile", "tabID": 8 }, { "bmk": "95_1Y1", "state": "blocked", "type": "ventile", "tabID": 8 }, { "bmk": "17H1", "state": "on", "type": "lamp", "tabID": 8 }, { "bmk": "l1", "state": "on", "type": "lamp", "tabID": 8 }, { "bmk": "17H1-2", "state": "on", "type": "lamp", "tabID": 2 }, { "bmk": "106M1", "state": "on", "type": "elevator", "tabID": 8 }, { "bmk": "154M1", "state": "off", "type": "elevator", "tabID": 8 }, { "bmk": "164M1", "state": "off", "type": "rotaryvalve", "tabID": 8 }]
这堂课ElementToUpdate
是
public class ElementToUpdate { public ElementType type; public String bmk; public string state; public int tabID; public ElementToUpdate() { } public ElementToUpdate(ElementType type, String bmk, string state, int tabID) { this.type = type; this.bmk = bmk; this.state = state; this.tabID = tabID; } }
所以我的问题是:如何解决这个问题?如果我正确理解错误消息,那么它表示tabID
序列化数组中的第5个json对象是null
.但正如你所看到的那样.而且ElementToUpdate.tabID
不是一个Int32
而是一个int
.我错过了什么?
解决方案
事实上,我的JSON字符串包含的元素,它tabID
是null
.我在某种程度上忽略了这一点,因为我检查时首先没有格式化我的JSON字符串,其次因为[5]意味着"数组的第6个元素"(我声称实际上知道).
使你的tabID可以为空:
public int? tabID;
值null
无法反序列化为整数.那是json的第6部分(或从0开始的第5部分):
{\"bmk\":\"test-m\",\"state\":\"on\",\"type\":\"motor\",\"tabID\":null}
你可以看到,tabID在那里是null.
根据您的用例,您可能还需要考虑让JSON Serializer忽略null