Estoy usando jquery para llamar a un servicio web que devuelve un conjunto de datos con un par de tablas.Se detectó una referencia circular al serializar un objeto de tipo System.Globalization.CultureInfo
Esto estaba funcionando bien hasta que necesité configurar mi webmethod para aceptar un parámetro. Reflejé esto en el lado del cliente con
data: "{paramname:'" + paramval+ "'}",
Ahora obtengo el siguiente error cuando el método web retorna. Esto ocurre independientemente de cuál de ser devuelto en el conjunto de datos
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
Cuando el WebMethod no tiene parámetros de la JS lado del cliente se ve igual que a continuación, excepto los datos: se elimina la línea.
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); }
}
});
}
Edit: Como por sugerencia de cambiar la solicitud a
data: {paramname: paramval},
produce el siguiente error.
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
para notar, usted tiene razón para enviar los datos JSON como una cadena (vs JSON real). Usted podría tratar de reformular la pregunta de cómo resolver el error: "Se ha detectado una referencia circular al serializar un objeto de tipo System.Globalization.CultureInfo" (que es lo que está sucediendo en el servidor) – meandmycode