JavaScript で JSON 文字列を作成し、mvc アプリケーションのコントローラーに送信しています。JSON文字列を作成する私のコード:
$('#btnassign').click(function () {
var arrPrice = "";
var arrMarkUP = "";
$("table tr").each(function () {
if ($(this).find('input:checkbox:first').is(':checked')) {
if ($(this).find('input.inputprice').val() != "") {
arrPrice += "{";
var price = $(this).find('input.inputprice').val();
var id = $(this).find('input[type=hidden]').val();
arrPrice += '"Id":"' + id + '","Price":"' + price + '"';
arrPrice += "},";
}
if ($(this).find('input.inputmarkup').val() != "") {
arrMarkUP += "{";
var price = $(this).find('input.inputmarkup').val();
var id = $(this).find('input[type=hidden]').val();
arrMarkUP += "Id:" + id + ",Price:" + price;
arrMarkUP += "},";
}
}
});
var lastindexp = arrPrice.lastIndexOf(",");
arrPrice = arrPrice.substring(0, lastindexp) + "|";
var lastindexm = arrMarkUP.lastIndexOf(",");
arrMarkUP = arrMarkUP.substring(0, lastindexm) + "|";
alert(arrPrice);
alert(arrMarkUP);
$("#hdPrice").val(arrPrice);
$("#hdMarkUP").val(arrMarkUP);
$("#AssignProductForm").submit();
});
});
私のJSON文字列は上記のコードから生成されます:
{"Id":"1","Price":"4"},{"Id":"2","Price":"6"}
私のコントローラ解析コード:
[HttpPost]
public ActionResult AddProducts(FormCollection collection, string txtsearch)
{
var ManualPricing = collection["hdPrice"].Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
JavaScriptSerializer ser = new JavaScriptSerializer();
var Manual = ser.Deserialize<PriceMargin>(ManualPricing[0]);
}
Price margin は、デシリアライズするクラスです:
public class PriceMargin
{
public string Id { get; set; }
public string Price { get; set; }
}
行var Manual = ser.Deserialize<PriceMargin>(ManualPricing[0])
にエラーが表示されます:
無効な JSON プリミティブ: {"Id":"2","Price":"9"}。
解決:
var list = new JavaScriptSerializer().Deserialize<List<KeyValue>>(json);
public class KeyValue
{
public string key;
public string value;
}