我似乎无法在SO中找到任何解决方案,所以这里有。
我在我的页面的C#中调用了一个WebMethod,就像这样;
$.ajax({
type: "POST",
url: "MyWebPage.aspx/jQueryMyWebMethod",
data: "{FamilyType:'" + $('.HdnFamilyType').val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
var obj = eval('(' + msg + ')');
}
});
在后面的代码中我创建了一个对象,序列化它并像这样返回它;
LHCRequiredFormViewModel fvm = new LHCRequiredFormViewModel();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(LHCRequiredFormViewModel));
MemoryStream ms = new MemoryStream( );
ser.WriteObject(ms, fvm);
return Encoding.Default.GetString(ms.ToArray());
然而,在我执行eval的Javascript中,我收到了错误;
预期']';
从C#返回序列化对象时,数据看起来像;
"{\"<IsApplicantLHCRequired>k__BackingField\":true,\"<IsPartnerLHCRequired>k__BackingField\":false}" string
我应该提一下,该项目是.Net 2.0,我只是返回一个序列化的对象w / out所有JSON guff并且它工作正常。
然后我转换为3.5并且问题开始了。然后我使用了JsonSerializer,但仍然得到完全相同的错误。
任何人都知道发生了什么以及如何解决它?
答案 0 :(得分:0)
虽然我不是100%肯定,但我相信问题出现在你的序列化对象中。
"{\"<IsApplicantLHCRequired>k__BackingField\":true,\"<IsPartnerLHCRequired>k__BackingField\":false}"
可能eval函数被“在那里弄糊涂了。你有没有尝试将其改为'?
答案 1 :(得分:0)
首先,我不确定C#
但您可以尝试将ms.ToArray()
更改为ms
return Encoding.Default.GetString(ms);
答案 2 :(得分:0)
很久以前我遇到了类似的问题。不幸的是,很久以前,我不记得我是如何修复它的。我只知道根本原因是从旧版本的.NET到3.5。
如果我的记忆正确地为我服务,请尝试以下方法 尝试在客户端上使用不同的反序列化器。例如来自http://www.json.org/json_parse.js
的Json Parse如果仍然无效。在服务器上尝试不同的序列化程序。 Json.NET是免费的,可以对您希望序列化数据的方式进行大量控制:http://www.codeplex.com/Json
或者我可能只需要将请求的MimeType设置为仅文本而不是HTML。
答案 3 :(得分:0)
使用jQuery.ajax,当你使用 json 作为dataType时,这意味着“为我评估这是因为它是JSON”,并且成功回调的参数将是一个对象。所以你有这个对象,你用字符串连接它。
eval('(' + msg + ')');
将 msg 强制转换为字符串,并将对象强制转换为字符串会返回“[object Object]”以获取您所拥有的简单哈希值。因此,使用括号,您最终得到:
"([object Object])"
Eval'ing这是一个完整的语法错误。
正如odge建议的那样,要么删掉“eval”,要么删除“json”dataType。