Date 値と整数配列だけでなく、多数の整数プロパティを含む JavaScript オブジェクトがあります。オブジェクトで JSON.stringify(entityModel, null, 2) を呼び出し、結果を HTTP ハンドラーに渡すたびに、次のような結果になります。
{
"UserId": "12345",
"Name": "Stewart",
"PositionId": "2",
"NextBirthday": "10-11-2013",
"FavouriteColour": "Blue",
"Hobbies": "1,3" // this is an array of ints in the client object prior to stringificaiton
}
私が欲しいのは
{
"UserId": 12345,
"Name": "Stewart",
"PositionId": 2,
"NextBirthday": "10-11-2013",
"FavouriteColour": "Blue",
"Hobbies": [1,3]
}
私はJSONを初めて使用しますが、どこが間違っているのか教えてもらえますか? 基本的に、サーバー側では、私のデシリアライザーは Hobbies プロパティを整数配列にデシリアライズしません。JSON によって文字列として扱われる場合、整数に問題が発生する可能性があります。
## 編集ページが読み込まれると、クライアント オブジェクトは次のようになります。
function EntityModel(){
this.UserId = null;
this.Name = null;
this.PositionId = null;
this.NextBirthday = null;
this.FavouriteColour = null;
this.Hobbies = null;
}
次に値を割り当て、値が数値かどうかを確認し、必要に応じて parseInt を使用して整数値を割り当てます。Hobbies プロパティには、以下のように整数配列を割り当てます。
var checkedValues = new Array();
element.find("input[type=checkbox]:checked").each(function () {
checkedValues.push(parseInt($(this).val()));
});
return checkedValues;
したがって、私のオブジェクトは最終的に次のようになります
function EntityModel(){
this.UserId = 123;
this.Name = "Stewart";
this.PositionId = 2;
this.NextBirthday = '10-11-2013';
this.FavouriteColour = 'blue';
this.Hobbies = [1,2];
}
次に、以下のようにオブジェクトをハンドラーに渡します。
var json = JSON.stringify(entityModel, null, 2);
$.ajax({
url: handlerPath,
contentType: "application/json; charset=utf-8",
type: 'POST',
dataType: "json",
data: json,
success: OnComplete,
error: OnFail
});
最後に、ハンドラー側で JSON 文字列を取得します
using (StreamReader inputStream = new StreamReader( HttpContext.Current.Request.InputStream ))
{
jsonString = inputStream.ReadToEnd();
}
そして、それはこのように見えます
"{\n \"UserId\": \"12345\",\n \"Name\": \"Stewart\",\n \"PositionId\": \"2\",\n \"NextBirthday\": \"2013-11-10\",\n \"FavouriteColour\": \"Blue\",\n \"Hobbies\": \"1,2,3\"\n}"
# 編集 2
以下は、クライアント オブジェクトに値を与えるために使用している関数です。最初の関数は、整数配列 (値がチェックボックス リストの選択に基づく場合) または int (値が数値の場合) または文字列のいずれかを返します。
function getElemValue(element, elementType, targetType) {
switch (elementType) {
case "System.Web.UI.WebControls.CheckBoxList":
var checkedValues = new Array();
element.find("input[type=checkbox]:checked").each(function () {
checkedValues.push(parseInt($(this).val()));
});
return checkedValues;
default:
return TryParseInt(element.val());
}
}
function TryParseInt(str) {
var retValue = str;
if (str != null) {
if (str.length > 0) {
if (!isNaN(str)) {
retValue = parseInt(str);
}
}
}
return retValue;
}