【发布时间】:2020-03-14 16:47:35
【问题描述】:
我在按钮上有一个功能(有效)我用键/值对形成 JSON 对象 priceWorkData 的 HashSet。我的意思是许多简单的键/值对,例如 {1,11;2,12,55,67;44,77}。我将它作为 JSON 对象传递给控制器,但我无法正确反序列化此 HashSet。我想在控制器中获取对的列表或字典。
function CalculateWorkHand(act) {
var mySet = new Set();
$(".PriceWork").each(function ()
{
var ValuePrice = this.value;
var Id = this.id
var o = {id: this.id, ValuePrice: this.value};
mySet.add(o);
});
var pricejson = {mySet: mySet };
$.ajax({
url: '@Url.Action("CalculateWorkHandJSON", "Acts")',
type: 'post',
dataType: "json",
data: { "pricejson": JSON.stringify(pricejson),"id":act},
success: function (data) {
if (data.success) {
alert("Success");
}
else {
alert("Data Error");
}
},
error: function(xhr, status) {
//var err = eval("(" + xhr.responseText + ")");
alert("Error AJAX");
}
});
};
public class SelectedJournal
{
// [JsonProperty("id")]
public string Id { get; set; }
// [JsonProperty("value")]
public string ValuePrice { get; set; }
}
public ActionResult CalculateWorkHandJSON(int id, string pricejson)
{
Act act = db.Act.Find(id);
var serializer = new JavaScriptSerializer();
List<SelectedJournal> deserializedResult = serializer.Deserialize<List<SelectedJournal>>(pricejson);
var temp = JsonConvert.DeserializeObject<List<SelectedJournal>>(pricejson);
..........
return ...;
}
我收到错误“无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[projectofstack.Controllers.ActsController+SelectedJournal]',因为类型需要一个 JSON 数组(例如 [1,2,3])才能正确反序列化。 要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。 路径 'priceWorkData',第 1 行,位置 17。'
【问题讨论】:
-
你能告诉我你的
pricejson字符串吗?我刚刚上线,所以我可以帮助您反序列化您的字符串。你也可以试试这个:var temp = JsonConvert.DeserializeObject<dynamic>(pricejson);。正确解析后,您可以访问解析后的temp字符串中的变量 -
您是否尝试过调试您的代码并检查您是否能够点击
CalculateWorkHandJSON方法?您可以导航到您的pricejson并查看您在那里收到的值。 -
从外观上看,您的
function CalculateWorkHand(act)没有收到itemID和itemPrice的值。您需要在函数中获取值。在这两行中:var ValuePrice = //get value here;var Id = //Get value here。你可以参考这个问题:stackoverflow.com/questions/10668623/… -
我需要问你两件事:1) 当你做
console.log(priceWorkData)时,你是否能够在你的priceWorkData中获得你的价值观。 2)如果您在priceWorkData字符串中获取值,那么您是否可以使用您的CalculateWorkHandJSON方法?如果您正在使用此方法,那么您在那里看到了什么价值? -
好的,你需要做的是你写
alert的地方,在那个类型下面:console.log(priceWorkData)。然后刷新您的页面并点击F12打开您的网络浏览器的开发者控制台。在Console类别下,您将看到打印的priceWorkData字符串。让我知道你在那里看到了什么