以下に示すように、VBでコレクションを逆シリアル化しようとしていました。隠し入力 "空文字列" vs "null" Javascript、VB
Dim items = JsonConvert.DeserializeAnonymousType(Page.Request.Params("Items"), New List(Of ItemDto))
デシリアライズに問題がありました。文字列 "value"はnullにできませんでした。
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)
コレクション「のアイテムは、」私は$("#Items').val(null);
をしなかった場合はそこにはアイテムがありませんし、それが正常に働いている場合しかし、それが実行される前に<input type="hidden"....>
に変換され<asp:HiddenField runat="server" ClientIDMode="Static" ID="Items" />
に保存しました。
私が$("#Items").val(null);
を行った後に、なぜ、$("#Items").val();
が ""と ""と表示されているのでしょうか?目に見えない違いがありますか?ゼロ幅のスペースのような?
なぜコレクションを「null」に設定するとコードが機能するのか分かりません。
ありがとうございました。
これは設計によるようです。 [** jquery .val Documentation **](http://api.jquery.com/val/)を見ると、 'String or Number or Array'が返されるだけで、Nullは次のように返されます。空の文字列 – Nope
これは、nullが空の文字列として出てくる理由を説明しますが、nullに設定する前に以前に空の文字列として出てきたときに逆直列化が失敗するのはなぜですか? – MerlynCooper
シリアル化はサーバ側で行われていませんか?ブラウザのデバッガコンソール(ChromeのF12)を開くと、[ネットワーク]タブが表示され、ヘッダーにサーバーに送信された値が表示されます。そうすれば、あなたは2の違いを知ることができます。 – Nope