English 中文(简体)
在序列化类型System.Globalization.CultureInfo的对象期间检测到循环引用。
原标题:
  • 时间:2009-03-23 11:45:20
  •  标签:

我正在使用jQuery调用一个Web服务,该服务返回一个包含几张表的数据集。

这个之前是工作正常的,直到我需要设置我的Web方法接受参数。我在客户端做了相应的修改。

data: "{paramname: " + paramval+ " Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.",

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

Error:{"Message":"A circular reference was detected while serializing an object of type u0027System.Globalization.CultureInfou0027.","StackTrace":" at System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) at ...etc

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

function ClientWebService(paramval){
$.ajax({
    type: "POST",
    url: "WebService1.asmx/webmethodName", 
    data: "{paramname: " + paramval+ " Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        ParseResult(msg.d);
    Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.,
    error: function(err) {
        if (err.status == 200) {
              ParseResult(err);
        Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.
        else { alert( Error:  + err.responseText +    Status:   + err.status); Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.
    Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.
Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.); 

Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.

修改:按建议更改请求为

data: {paramname: paramvalSorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate.,

产生了以下错误。

Error:{"Message":"Invalid JSON primitive: paramval.","StackTrace":"
at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input) at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer) at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context) at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"Sorry, you didn't provide any text for me to translate. Please provide the text you'd like me to translate. Status: 500

最佳回答

我已将我的Web方法改为返回。

ds.GetXml();

并且这起作用了。考虑到数据集是可序列化的,我不确定为什么我要做这个,但它让我克服了这个障碍。

问题回答

我有完全相同的问题。

我已经从我的实体中删除了虚拟关键字,这会使对象的惰性加载。

问题已经解决!

this will often happen when serializing objects with entityrefs and entitysets. e.g if you have a set like this

public EntitySet<ProductCategory> Subcategories 

序列化器将进入ProductCategory并尝试将其中所有集合序列化,经常最终回到原始对象,从而创建一个循环。

避免这种情况的最佳方法是对字段加上[ScriptIgnore][NonSerialized],对属性加上[ScriptIgnore],就像这样。

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

同样在裁判。

我知道这个问题已经被回答了,但我遇到了同样的问题,觉得自己应该把解决方法放在这里,这样其他人就可以希望解决这个问题。

data: JSON.stringify(Params),

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

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

在服务器端出现类型转换异常时,我遇到了这个响应。





相关问题
热门标签