【发布时间】:2017-03-01 13:37:15
【问题描述】:
我试图在 VB 中对一个集合进行 JSON 反序列化,如下所示。
Dim items = JsonConvert.DeserializeAnonymousType(Page.Request.Params("Items"), New List(Of ItemDto))
反序列化出现问题,字符串“value”不能为空。
System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentNullException: Value cannot be null.
Parameter name: value
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
集合“项目”存储在<asp:HiddenField runat="server" ClientIDMode="Static" ID="Items" /> 中,转换为<input type="hidden"....>
但是,如果我在它运行之前执行了$("#Items').val(null);,如果没有项目,那么它就会正常工作。
问题是,为什么$("#Items").val(); 在我完成$("#Items").val(null); 之前和之后显示为“”,并且有无形的区别?像零宽度空间?
我不知道为什么将集合设置为“null”会使代码正常工作。
谢谢。
【问题讨论】:
-
这似乎是设计使然。查看jquery .val Documentation 它声明它只返回
String or Number or Array我认为这就是为什么Null 作为空字符串返回的原因。 -
这可以解释为什么 null 以空字符串的形式出现,但是,为什么在将它设置为 null 之前之前以空字符串形式出现时,它会无法反序列化?
-
你的序列化不是发生在服务器端吗?如果您打开浏览器调试器控制台(Chrome 中的 F12),请检查网络选项卡,并在标题中显示发送到服务器的值。这样您就可以看到两者之间的区别。
标签: javascript asp.net vb.net invisible