Mi método de extensión JSON

Filed Under (.Net) by admin on 31-07-2008


//extensiones [como ToString()]

 

Public Module Extensiones

 

    <Runtime.CompilerServices.Extension()> _

    Public Function ToJSON(ByVal datos As Agromutua.Entity.DatosBancarios) As String

 

        Dim datosBancarios As String

 

        Dim prov As New Persistencia.Provincia

        Dim pk() As Object = New Object() {datos.IdProvincia}

 

        datosBancarios = “{Id: ‘” & datos.Id & “‘ ,” _

                                & “Banco: ‘” & datos.Banco & “‘ ,” _

                                & “Calle: ‘” & datos.Calle & “‘ ,” _

                                & “Agencia: ‘” & datos.Agencia & “‘ ,” _

                                & “CodPostal: ‘” & datos.CodigoPostal & “‘ ,” _

                                & “CuentaBanco: ‘” & datos.CuentaBanco & “‘ ,” _

                                & “CuentaOficina: ‘” & datos.CuentaOficina & “‘ ,” _

                                & “CuentaDC: ‘” & datos.CuentaDC & “‘ ,” _

                                & “CuentaNumero: ‘” & datos.CuentaNumero & “‘ ,” _

                                & “Provincia: ‘” & datos.IdProvincia & “‘ ,” _

                                & “NProvincia: ‘” & prov.Obtener(pk).Nombre & “‘ ,” _

                                & “Municipio: ‘” & datos.Municipio & “‘}”

 

        Return datosBancarios

    End Function

 

End Module

 

 

 

 

 

 

//trabajando con JSON – Objetos JS

 

function cambiaDatosBancarios() {

   

    var msg = document.getElementById(‘<%=cboImportar.ClientID %>’).value;

    if (msg != “”)

    {

        var x = eval(“(“ + msg + “)”);

       

        document.getElementById(‘<%=txtidDatosBAncarios.ClientID %>’).value = x.Id;

        document.getElementById(‘<%=txtBanco.ClientID %>’).value = x.Banco;

        document.getElementById(‘<%=txtBancoCalle.ClientID %>’).value = x.Calle;

        document.getElementById(‘<%=txtAgenciaNo.ClientID %>’).value = x.Agencia;

        document.getElementById(‘<%=txtBancoCP.ClientID %>’).value = x.CodPostal;

        document.getElementById(‘<%=txtCuentaBanco.ClientID %>’).value = x.CuentaBanco;

        document.getElementById(‘<%=txtCuentaOficina.ClientID %>’).value = x.CuentaOficina;

        document.getElementById(‘<%=txtCuentaDC.ClientID %>’).value = x.CuentaDC;

        document.getElementById(‘<%=txtCuentaNumero.ClientID %>’).value = x.CuentaNumero;

        document.getElementById(‘<%=txtBancoMunicipio.ClientID %>’).value = x.Municipio;

        document.getElementById(‘<%=txtBancoProvincia.ClientID %>’).value = x.Provincia;

        document.getElementById(‘<%=lblBancoProvincia.ClientID %>’).innerHTML  = x.NProvincia;

        DatosBancarioOnBlur()              

    }

    else limpiarDatosBancarios()

   

   

}

Métodos de extensión en .Net

Filed Under (.Net) by admin on 31-07-2008

Los métodos de extensión permiten a los desarrolladores añadir métodos a los contratos públicos de tipos del CLR existentes, sin tener que crear subclases o recompilar el tipo original. Con esto se nos presentan un montón de nuevos escenarios (incluso en LINQ). También nos dan una forma muy conveniente de añadir un poco de azúcar sintáctico a nuestro código.Dos de los escenarios que añadí a mi lista de métodos de extensión eran métodos que generasen automáticamente JSON (JavaScript Object Notation) o cadenas de serialización XML para cualquier objeto .NET 

Escenario Simple: El método de extensión ToJSON()

Supongamos que tenemos un objeto Person definido de la siguiente forma (nota: Usamos la nueva característcia de propiedades automáticas para implementarlo):

Me gustaría ser capaz de inicializar una colección de objetos Person y obtener programáticamente una representación en JSON llamando a un método ToJSON() de la siguiente forma:

Esto funcionaría igual que el método ToString() de la clase Object de .NET – pero generaría un string en formato JSON con la representación de la colección que podríamos usar en escenarios AJAX en cliente:

Nota: Haciendo clic en la lupa en el debugger veremos un visualizador de text en VS para ver una versión del JSON:

Este formato podemos usarlo con JavaScript en el cliente para instanciar un objeto JavaScript que represente a nuestra colección (nota: ASP.NET AJAX tiene una librería que permite esto).

Implementando el método de extensión ToJSON

Implementar un método de extensión ToJSON es algo muy simple. Todo lo que necesitamos hacer es usar la clase JavaScriptSerializer del namespace System.Web.Script.Serialization, y definir dos métodos de extensión como los siguientes. Uno de los métodos serializa un objeto con cualquier nivel de profundidad, el otro es una sobrecarga que nos permite restringir el grado de profundidad en la recursividad (por ejemplo: ToJSON(2) serializaría sólo 2 niveles del objeto):

Fijaos que estos métodos de extensión están definidos para el tipo “Object” – con lo que podremos usarlos con cualquier objeto en .NET (no sólo con colecciones). Es decir, además de llamar .ToJSON() en las colecciones como anteriormente, podríamos hacerlo para objetos individuales del tipo Person, y con cualquier objeto tipo de .NET

Para usar este método de extensión, lo único que necesitamos es añadir una sentencia using al principio del programa que referencie el namespace donde está definido:

VS 2008 nos da soporte en el intellisense automaticamente en cualquier tipo de objeto:

Nota: A parte de la clase JavaScriptSerializer, .NET 3.5 también incluye la clase System.Runtime.Serialization.DataContractJsonSerializer que podemos usar para la serialización/deserialización en JSON

Propiedades automáticas

Filed Under (.Net) by admin on 31-07-2008

Nueva característica de C#: Propiedades automáticas.

Si sois desarrolladores de C#, estaréis acostumbrados a escribir clases con propiedades básicas como en el código siguiente:

public class Person {         private string _firstName;
private string 
_lastName;
private int 
_age;

public string FirstName {
get {
return _firstName;
}
set {
_firstName 
= value;
}
}
        public string LastName {
get {
return _lastName;
}
set {
_lastName 
= value;
}
}

public int Age {
get {
return _age;
}
set {
_age 
= value;
}
}
}

El nuevo compilador de C# que viene con Orcas, nos proporciona una forma elegante para hacer que el código que escribamos sea más conciso mientras mantiene la flexibilidad de las propiedades usando una nueva característica conocida como “propiedades automáticas”. Las propiedades automáticas nos permiten evitar la declaración manual de variables privadas y escribir el código de los métodos get/set – En lugar de eso, el compilador puede crear automáticamente las variables privadas necesarias y el código por defecto de los métodos get/set por nosotros.Por ejemplo, usando las propiedades automáticas podemos reescribir el código anterior de la siguiente manera:

public class Person {

public string FirstName {
get; set;
}         public string LastName {
get; set;
}

public int Age {
get; set;
}
}

O si queremos ser más precisos aún, podemos eliminar los espacios en blanco y llegar más lejos de la siguiente forma:

public class Person {
public string FirstName { get; set; }
public string LastName  { get; set; }
public int    Age       { get; set; }
}