我有一个非常奇怪的问题,我的viewmodels没有在IIS上转换为JSON。如果我在我的系统上调试相同的代码,它工作正常并将viewmodesl转换为JSON。相同的代码在IIS上不会产生相同的结果。
这就是我在调用ko.toJSON之后我的viewmodels的样子。
在IIS上:
"{"__ko_mapping__":{"ignore":[],"include":["_destroy"],"copy":[],"mappedProperties": {"__type":true,"Prop1":true,"Prop2":true,"Prop3":true,"Prop4":true,"Prop5":true}}}"
在本地
{"__type":"DealerModel","Prop1":"","Prop2":"","Prop3":"","Prop4":"","Prop5":"Some Name ltd"}}}"
这就是我的DealerModel类的样子:
[Serializable]
Public class DealerModel
{
public string Porp1 { get; set; }
public string Porp2 { get; set; }
public string Porp3 { get; set; }
public string Porp4 { get; set; }
public string Porp5 { get; set; }
}
我想问题是DealerModel不会以类型的形式传递给JSON或其他东西。
有没有人遇到过这个问题?这可能是什么问题?
这是我将viewmodesl转换为JS的方式。服务器端的方法需要arraylist。
var jsonViewModel = '';
jsonViewModel = ko.toJSON(myNameSpace.ViewModel1);
jsonViewModel = jsonViewModel.replace(/\/Date\((.*?)\)\//gi, "new Date($1)");
saveArray[0] = jsonViewModel
jsonViewModel = ko.toJSON(myNameSpace.ViewModel2);
jsonViewModel = jsonViewModel.replace(/\/Date\((.*?)\)\//gi, "new Date($1)");
saveArray[1] = jsonViewModel
$.ajax({
type: "POST",
url: "Services/SomeService.asmx/SaveObjects",
cache: true,
contentType: "application/json; charset=utf-8",
data:"{args:" + ko.toJSON(saveArray) + "}",
dataType: "json"
});
SaveObjects方法需要arrayList。
答案 0 :(得分:3)
ko.toJSON(saveArray);
它不会创建json对象。它会产生json字符串。
创建json对象使用
ko.toJS(saveArray);
注意:为了在没有本机JSON序列化程序(例如,IE 7或更早版本)的旧浏览器上工作,您还必须引用json2.js库。
答案 1 :(得分:1)
ko.mapping plugin是否添加了__ko_mapping__
?看起来该对象没有属性,就好像在IIS上使用ko.mapping并尝试传递空映射选项对象,但交换参数:
var mappingOptions = { };
var data = { "FirstName": "Bruce". "LastName": "Banner" };
var vmBad = ko.mapping.fromJS(mappingOptions, data);
var vmGood = ko.mapping.fromJS(data, mappingOptions);
vmBad实际上是一个视图模型,只有隐藏的 ko_mapping 属性,映射插件使用...如果你有,你需要使用ko.mapping转换回json去除那个财产。 (jsfiddle)
答案 2 :(得分:0)
你应该能够做到这一点:
$.ajax({
type: "POST",
url: "Services/SomeService.asmx/SaveObjects",
data: { args: saveArray }
});
如果这不起作用,您也可以发布端点代码吗?
<强>更新强> 我从你的ajax帖子中删除了我认为你不需要的东西,因为我没有看到任何来自服务器的数据的回调。
答案 3 :(得分:-1)
当您致电ko.toJSON(myNameSpace.ViewModel1)
时,它应为ko.toJSON(myNameSpace.ViewModel1())
。视图模型的执行可能会正确显示您的属性。