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

我正在使用jquery来调用webservice,它返回一个包含几个表的数据集。

这工作正常,直到我需要设置我的webmethod接受参数。 我在客户端反映了这一点

data: "{paramname:'" + paramval+ "'}", 

我现在在webmethod返回时收到以下错误。 无论数据集中返回什么,都会发生这种情况

错误:{“消息”:“在序列化类型为\ u0027System.Globalization.CultureInfo \ u0027的对象时检测到循环引用。”,“StackTrace”:“在System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o ,StringBuilder sb,Int32 depth,Hashtable objectsInUse,SerializationFormat serializationFormat)\ r \ n at … etc

当webmethod没有参数时,客户端js看起来与下面相同,除了data:line被删除。

 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}, 

产生以下错误。

错误:{“消息”:“无效的JSON原语:paramval。”,“StackTrace”:“
System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize中的System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\ r \ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32深度)\ r \ n中的System.Web。 (字符串输入,Int32 depthLimit,JavaScriptSerializer序列化程序)\ r \ n在System.Web.Script上的System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化程序,字符串输入,类型类型,Int32 depthLimit)\ r \ n。 System.Web.Script.Script.Services.RestHandler中的System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext上下文,JavaScriptSerializer序列化程序)\ r \ n的Serialization.JavaScriptSerializer.Deserialize [T](字符串输入)\ r \ n。 GetRawParams(WebServiceMethodData methodData,HttpContext context)\ r \ n在System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)“,”ExceptionType“:”System.ArgumentException“}状态:500

我改变了我的webmethod返回

 ds.GetXml(); 

这很有效。 考虑到数据集是可序列化的,我不确定为什么我必须这样做,但它让我克服了这个障碍。

我有同样的问题,

我从我的实体中删除了虚拟关键字,这使得延迟加载对象。

问题解决了!!

当使用entityrefs和entitysets序列化对象时,通常会发生这种情况。 例如,如果你有这样的一套

  public EntitySet Subcategories 

序列化程序将进入ProductCategory并尝试序列化那里的所有集合,通常最终返回原始对象,从而创建一个循环。

避免这种情况的最好方法是在字段上放置[ScriptIgnore]和[NonSerialized],在这样的属性上放置[ScriptIgnore]。

  [ScriptIgnore] [NonSerialized] private EntitySet _Subcategories; [ScriptIgnore] [Association(Storage = "_Subcategories", ThisKey = "ID", OtherKey = "ParentID")] public EntitySet Subcategories { get { return this._Subcategories; } set { this._Subcategories.Assign(value); } } 

参考文献相同

我知道这个问题已得到解答,但我遇到了同样的问题,并认为我应该把对我有用的东西放在这里,以便其他人可以解决这个问题。

 data: JSON.stringify(Params), 

通过使用JSON.stringify方法,我得到了所需的结果

params等于{"key":"value"}

当存在类型转换exception服务器端时,我遇到了此响应。