2017-03-01 37 views
0

我正試圖在VB中反序列化JSON集合,如下所示。隱藏輸入「空字符串」vs「空」Javascript,VB

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」使代碼正常工作。

謝謝。

+1

它似乎是設計。看看[** jquery .val文檔**](http://api.jquery.com/val/)它聲明它只返回一個'字符串或數字或數組'我假設這就是爲什麼Null返回爲一個空的字符串。 – Nope

+0

這可以解釋爲什麼null會以空字符串的形式出現,但是,爲什麼在將它設置爲null之前以空字符串的形式出現時未能反序列化? – MerlynCooper

+1

你的序列化不在服務器端發生嗎?如果打開瀏覽器調試器控制檯(Chrome中的F12),請檢查網絡選項卡,並在標題中顯示發送給服務器的值。這樣你就可以看到2之間的區別了。 – Nope

回答

1
$("#Items").val(); 

永遠不會返回返回NULL等空字符串,當你做

$("#Items').val(null); 

它並將其值設爲「」或空字符串,而不是空

所以下面的異常不會被拋出

System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentNullException: Value cannot be null. 

因爲該值設置爲「」你的JQuery,而不是NULL,因此不會提高ASP.NET例外