lunes, 15 de marzo de 2010

XSD2Code Generator

XSD2Code Generator es una herramienta que nos permite generar business class a partir de schemas xml (ficheros .xsd). Es una evolución de la herramienta xsd.exe que viene con nuestra instalación de visual studio.

Cómo características a resaltar respecto a la herramienta xsd.exe es que soporta generics y custom collections. Cuando generamos classes con xsd, xsd.exe nos generaba clases con atributos del tipo array, mientras que xsd2code nos genera clases con propiedades del tipo List. Además se nos añade como un Addin para visual studio 2008.


Un ejemplo bien secillo de su uso sería el siguiente:


1. Obtener o generar un xml para el que queremos generar la classe que lo serialize / deserialize.







foo1
foo2


foo1
foo2





2. Generar el schema (fichero .xsd) Menú XML > Create Schema, se nos generará un archivo cómo el siguiente.






























3. Por último hacemos botón derecho sobre el fichero .xsd desde el solution explorer y pulsamos la opción Run xsd2code generation. Se nos abrirá una ventana modal donde podemos elegir las propiedades para la generación del código, como por ejemplo el lenguaje, si queremos una clase base, etc. A continuación muestro un trozo de código generado con esta herramienta.




using System;
using System.Diagnostics;
using System.Xml.Serialization;
using System.Collections;
using System.Xml.Schema;
using System.ComponentModel;
using System.Collections.Generic;

namespace prueba {

public partial class FooClass {

private List fooSubClassesField;

private string attribute1Field;

public FooClass() {
this.fooSubClassesField = new List();
}

[System.Xml.Serialization.XmlArrayItemAttribute("FooSubClass", IsNullable=false)]
public List FooSubClasses {
get {
return this.fooSubClassesField;
}
set {
this.fooSubClassesField = value;
}
}

public string Attribute1 {
get {
return this.attribute1Field;
}
set {
this.attribute1Field = value;
}
}
}

public partial class FooClassFooSubClass {

private string field1Field;

private string field2Field;

public string field1 {
get {
return this.field1Field;
}
set {
this.field1Field = value;
}
}

public string field2 {
get {
return this.field2Field;
}
set {
this.field2Field = value;
}
}
}
}

No hay comentarios: