我正在使用 jquery 调用一个网络服务,它返回一个包含几个表的数据集。
在我需要设置我的 web 方法以接受参数之前,它一直工作正常。我用
在客户端反射(reflect)了这一点data: "{paramname:'" + paramval+ "'}",
当 web 方法返回时,我现在收到以下错误。无论数据集中返回什么,都会发生这种情况
Error:{"Message":"A circular reference was detected while serializing an object of type \u0027System.Globalization.CultureInfo\u0027.","StackTrace":" at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat)\r\n at ...etc
当 web 方法没有参数时,客户端 js 看起来与下面相同,除了 data: 行被删除。
function ClientWebService(paramval){
$.ajax({
type: "POST",
url: "WebService1.asmx/webmethodName",
data: "{paramname:'" + paramval+ "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
ParseResult(msg.d);
},
error: function(err) {
if (err.status == 200) {
ParseResult(err);
}
else { alert('Error:' + err.responseText + ' Status: ' + err.status); }
}
});
编辑:根据建议将请求更改为
data: {paramname: paramval},
产生以下错误。
Error:{"Message":"Invalid JSON primitive: paramval.","StackTrace":"
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"} Status: 500
最佳答案
我改变了我的网络方法以返回
ds.GetXml();
这成功了。考虑到数据集是可序列化的,我不确定为什么我必须这样做,但它让我克服了这个障碍。
关于c# - 序列化 System.Globalization.CultureInfo 类型的对象时检测到循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673079/