none
System.InvalidOperationException,referencia circular al serializar... RRS feed

  • Pregunta

  • Hola a todos necesito de su ayuda por favor estoy trabajando con vb.net y mysql, lo que estoy haciendo es mostrar los datos de una tabla a traves de ajax pero me sale un mensaje de referencia circular al serializar, lo datos los quiero mostrar en un gridview, estoy empezando con ajax y no eh podido corregir mi error y mostrar mis datos, mi codigo es:

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="MostrarAjax._Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $('#btnmostrar').click(function (e) {
                    e.preventDefault();
    
                    $.ajax({
                        type: "POST",
                        url: "Default.aspx/Mostrar",
                        data: null,
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        async: true,
                        success: function (resultado) {
                            alert(resultado.d);
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            alert(XMLHttpRequest + "" + textStatus + "" + errorThrown);
                        }
                    });
                });
            });  
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>    
            <asp:Button ID="btnmostrar" runat="server" Text="Mostrar" />
            <br />    
        </div>
        </form>
        <div id="msg"></div>
        <asp:DataGrid ID="dgmuestra" runat="server">
        </asp:DataGrid>
    </body>
    </html>

    CODEBEHIND

    Imports System.Data
    Imports MySql.Data.MySqlClient
    Imports System.Web.Services
    
    Public Class _Default
        Inherits System.Web.UI.Page
    
        <WebMethod()>
        Public Shared Function Mostrar() As DataTable
    
            Dim dt As New DataTable
            Dim cn As String
            cn = "Data Source=localhost; Database=alumnos; User Id=root; Password="
            Dim conexion As New MySqlConnection(cn)
            conexion.ConnectionString = cn
    
            Try
            conexion.Open()
    
            Dim da As New MySqlDataAdapter("SELECT * FROM alumnos", conexion)
    
            da.Fill(dt)
    
            Catch ex As Exception
            
            End Try
    
            Return dt
    
        End Function
    End Class


    ivxn25


    • Editado Ivxn25 sábado, 9 de enero de 2016 5:56
    sábado, 9 de enero de 2016 5:55

Respuestas

  • hola

    lo que aconsejaria es que no uses datatable en un servicio que invocas desde $.ajax, recuerda que los datos se deben serializar y el datatable es un objeto bastante complejo para lograrlo

    recomendaria uses una clase que tu definas

    Public Class Alumno
    
    	Public Property Id As String
    	Public Property Nombre As String
    	Public Property Apellido As String
    
    End Class

    y luego le asignes datos

    <WebMethod()>
    Public Shared Function Mostrar() As List(Of Alumno)
    
    	
    	Dim cn As String = "Data Source=localhost; Database=alumnos; User Id=root; Password="
    	Dim conexion As New MySqlConnection(cn)
    	conexion.Open()
    
    	Dim x As String = "SELECT Id, Nombre, Apellido FROM alumnos"
    	Dim cmd As New MySqlCommand(query, conexion)
    
    	Dim reader As MySqlDatareader = cmd.ExecuteReader()
    
    	Dim lista As New List(Of Alumno)
    	While reader.Read
    		Dim item As New Alumno
    		item.Id = Convert.ToInt32(reader("Id"))
    		item.Nombre = Convert.ToString(reader("Nombre"))
    		item.Apellido = Convert.ToString(reader("Apellido"))
    		lista.Add(item)
    	End While
    
    	Return lista
    	
    End Function

    la lista del tipo de la clase es mas simple de serializar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 9 de enero de 2016 14:33

Todas las respuestas

  • ¿En qué instrucción te da el error?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 9 de enero de 2016 6:40
  • hola

    lo que aconsejaria es que no uses datatable en un servicio que invocas desde $.ajax, recuerda que los datos se deben serializar y el datatable es un objeto bastante complejo para lograrlo

    recomendaria uses una clase que tu definas

    Public Class Alumno
    
    	Public Property Id As String
    	Public Property Nombre As String
    	Public Property Apellido As String
    
    End Class

    y luego le asignes datos

    <WebMethod()>
    Public Shared Function Mostrar() As List(Of Alumno)
    
    	
    	Dim cn As String = "Data Source=localhost; Database=alumnos; User Id=root; Password="
    	Dim conexion As New MySqlConnection(cn)
    	conexion.Open()
    
    	Dim x As String = "SELECT Id, Nombre, Apellido FROM alumnos"
    	Dim cmd As New MySqlCommand(query, conexion)
    
    	Dim reader As MySqlDatareader = cmd.ExecuteReader()
    
    	Dim lista As New List(Of Alumno)
    	While reader.Read
    		Dim item As New Alumno
    		item.Id = Convert.ToInt32(reader("Id"))
    		item.Nombre = Convert.ToString(reader("Nombre"))
    		item.Apellido = Convert.ToString(reader("Apellido"))
    		lista.Add(item)
    	End While
    
    	Return lista
    	
    End Function

    la lista del tipo de la clase es mas simple de serializar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 9 de enero de 2016 14:33
  • Hola, como te ha comentado Leandro Tuttini, lo que estas intentado serializar es un objeto complejo, el error se da cuando una propiedad de ese objeto hacer referencia a otro objeto que a su vez hace referencia al primero, al tratar de serializar nunca se terminaría de describir el objeto resultante.<o:p></o:p>

    Saludos.<o:p></o:p>

    sábado, 9 de enero de 2016 17:42
  • hola Leandro Tuttini ya esta todo bien, muchas gracias, solo una ultima pregunta como puedo mostrar los datos en el gridview

    ivxn25


    • Editado Ivxn25 sábado, 9 de enero de 2016 18:39
    sábado, 9 de enero de 2016 18:35