c# - 序列化 System.Globalization.CultureInfo 类型的对象时检测到循环引用

标签 c# jquery web-services json

我正在使用 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/

相关文章:

c# - 授权 : Basic in client for SOAP Service

c# - 如果通过 Wscript.shell 调用的外部应用程序抛出异常,PHP 脚本将挂起

c# - 如何 stub HttpControllerContext

javascript - 如何让div滚动滑动?

javascript - 什么时候不使用 MVC bundle ?

javascript - 只允许那些在我的列表框中有实数的项目

c# - 在 Visual Studio 2012 上使用 Web 引用而不是服务引用

c# - WPF 如何使列表框项目可编辑?

java - 为 XMLRootElement 命名

C# 将 Winforms 连接到在线主机 (goDaddy)