[英]JSON not being deserialized correctly on the server
我在客户端具有javascript对象,该对象具有SettingName和SettingValue属性。
obj1.SettingName = "createdDate";
obj1.SettingValue = "10/07/2013";
obj2.SettingName = "arrayOfNames";
obj1.SettingValue = SomeArray; //An array of 5 strings
var settingsArray =new Array();
settingsArray[0] = obj1;
settingsArray[1] = obj2;
var settingsContainer = new Object;
settingsContainer.Settings = settingsArray;
$.ajax({
type: "POST",
url: "myURL",
data: { settings: JSON.stringify(settingsContainer)},
dataType: 'json',
success: function (data) {
//do something
}
});
public class Setting
{
public string SettingName { get; set; }
public object SettingValue { get; set; } //so this can hold multiple data types
}
public class SettingsContainer
{
public List<Setting> Settings { get; set;}
}
public ActionResult myURL(SettingsContainer settings) {
//Here, the value for SettingsContainer.Settings[1].SettingValue, which
should be Array[5] i.e. on the C# side, I expect to see Object[5],
is only {object}. I'm not sure what's going on.
Is my approach of handling this correct?
}
任何建议/帮助将不胜感激。 谢谢!
在服务器端方法上,应使用:
public ActionResult myURL(string settings) {
// deserialize the string to your object here;
}
但您必须重新设计类,因为javascript反序列化不支持它们。
尝试将“ SettingValue”用作List<string>
或期望的值。 您不能反序列化对象,因为反序列化器不知道对象是什么。
尝试在ajax调用中设置数据行,如下所示
data: "{ 'settings':" + JSON.stringify(settingsContainer)+"}",
(也许您可以避免使用SettingsContainer,而只需使用向量或设置列表作为方法参数)。
以下代码应该可以帮助您解决问题。
代码背后:
public class helper
{
public List<DoubleText> prop { get; set; }
}
public class DoubleText
{
public string data1 { get; set; }
public object data2 { get; set; }
}
[WebMethod]
public static string work(helper example)
{
// do stuff here
return "ok";
}
javascript / jquery
var example = new Object();
example.data1 = 'value';
example.data2 = ['value1', 'value2'];
var example2 = new Object();
example2.data1 = 'value';
example2.data2 = ['value1', 'value2'];
var vector = new Array();
vector[0] = example;
vector[1] = example2;
var ex = new Object();
ex.prop = vector;
var test = "{ 'example':" + JSON.stringify(ex) + "}";
$.ajax({
type: "POST",
url: '/work.aspx/work',
data: test,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// stuff
},
error: function () { // other stuff}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.