我在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]);
}
价格保证金是一个应该反序列化的类:
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;
}
答案 0 :(得分:1)
您的JSON无效。
JSON只能有一个根对象。
如果您想拥有多个对象,请序列化数组。
答案 1 :(得分:1)
要跟进评论,如果你想要一个对象数组,你可以这样做:
pricesArray = [];
$("table tr").each(function () {
if ($(this).find('input:checkbox:first').is(':checked')) {
var price = $(this).find('input.inputprice').val();
var id = $(this).find('input[type=hidden]').val();
pricesArray.push({Id : id, Price: price});
}
});
// pricesArray [{"Id":"1","Price":"4"},{"Id":"2","Price":"6"}]
pricesArray
现在应该包含您想要的数据,应该更容易序列化和解密数据并立即发送
答案 2 :(得分:0)
上次遇到这个错误时,我试图直接将对象值传递给json数据......即 data = {datavalue:@ Object.valueField};
在Json
$。AJAX({ 键入:&#34; POST&#34;, url:&#34; / Controller / FunctionToPostTo&#34;, 数据:数据, contentType:&#34; application / json;字符集= UTF-8&#34 ;, dataType:&#34; html&#34;, 成功:功能(响应){ 警报(&#39;成功&#39;); }, 失败:功能(响应){ 警报(&#39;故障&#39;); 警报(response.responseText); }, 错误:函数(响应){ 警报(&#39;错误&#39); 警报(response.responseText); } });
解决问题我创建了一个单独的变量并为其赋值, 在Ajax中传递数据值我使用了JSON.stringify函数
var variableHolder = @ Object.valueField; data = {datavalue:variableHolder};
在Json
$。AJAX({ 键入:&#34; POST&#34;, url:&#34; / Controller / FunctionToPostTo&#34;, data:JSON.stringify(data), contentType:&#34; application / json;字符集= UTF-8&#34 ;, dataType:&#34; html&#34;, 成功:功能(响应){ 警报(&#39;成功&#39;); }, 失败:功能(响应){ 警报(&#39;故障&#39;); 警报(response.responseText); }, 错误:函数(响应){ 警报(&#39;错误&#39); 警报(response.responseText); } });
然后问题消失了