Mudanza
Me he mudado a WordPress a la dirección http://jmservera.wordpress.com así que no seguiré escribiendo en este. He copiado allí todos mis artículos y en unos meses daré de baja I Remote para siempre.
Otro blog sobre C#
Me he mudado a WordPress a la dirección http://jmservera.wordpress.com así que no seguiré escribiendo en este. He copiado allí todos mis artículos y en unos meses daré de baja I Remote para siempre.
Publicado por
jmservera
en
21:07
0
comentarios
Enlaces a esta entrada
Publicado por
jmservera
en
12:10
0
comentarios
Enlaces a esta entrada
Para ayudar a la comunidad a crear sus propias librerías cliente de OData, el equipo de Project Astoria ha publicado sus librerías de cliente .Net y Silverlight en codeplex bajo licencia Apache 2.0.
Publicado por
jmservera
en
17:01
0
comentarios
Enlaces a esta entrada
Etiquetas: ADO.NET Data Services
Microsoft patterns & practices ha publicado la nueva Enterprise Library 5.0, una colección de módulos que se pueden usar a modo de bloques prefabricados y configurables para construir grandes aplicaciones.
Publicado por
jmservera
en
23:57
0
comentarios
Enlaces a esta entrada
Etiquetas: Herramientas
Publicado por
jmservera
en
09:34
0
comentarios
Enlaces a esta entrada
Hoy, leyendo una entrada de Jose Fco Bonnin, me han empezado a sonar las alarmas y he sentido la necesidad de investigar un poco.
Publicado por
jmservera
en
09:35
0
comentarios
Enlaces a esta entrada
Etiquetas: FxCop, Herramientas, VS.Net
Para acabar con esta espontanea serie de posts sobre el XmlSerializer os cuento un par de trucos no demasiado bien documentados para controlar la serialización.
En algunas ocasiones podemos necesitar que una clase hija no persista algunas de las propiedades del base, pero, como ya hemos visto antes, si la propiedad no es virtual se complica un poco el asunto. En estos casos podemos añadir un miembro público a la clase base con el mismo nombre de la propiedad + Specified con el valor a true:
public class C1{public string MyProperty { get; set; }[XmlIgnore]public bool MyPropertySpecified = true;}
De esta manera al heredar de la clase podremos especificar su valor a false, lo que hará que no se persista dicha propiedad:
public class C2:C1{public string MyOtherProperty { get; set; }public C2(){MyPropertySpecified = false;}}
En otras ocasiones, lo que querremos es decidir cuando se debe persistir el valor y cuando no. Por ejemplo, si una lista no tiene valores o si un string es null puede que no nos interese que aparezca el valor vacío en el xml. Eso se consigue con un método público llamado ShouldSerialize + el nombre de la propiedad y que devuelva un bool indicando si la propiedad debe persistirse:
public class C3 : C2{public string MyThirdProperty { get; set; }public bool ShouldSerializeMyThirdProperty(){return false;}}
Ahora podéis probar las clases, adivinad qué mostrará cada llamada:
XmlSerializer ser = new XmlSerializer(typeof(C1),new Type[] { typeof(C2), typeof(C3) });ser.Serialize(Console.Out, new C1() { MyProperty = "test"});Console.WriteLine();ser.Serialize(Console.Out, new C2() { MyProperty = "test",MyOtherProperty = "test 2" });Console.WriteLine();ser.Serialize(Console.Out, new C3() { MyProperty = "test",MyOtherProperty = "test 2", MyThirdProperty="test 3" });Console.ReadLine();
Publicado por
jmservera
en
13:51
0
comentarios
Enlaces a esta entrada
Etiquetas: Trucos
public class C1
{
List<C1> _myList = new List<C1>();
public List<C1> MyList { get { return _myList; } }
}
public class C2:C1
{
List<C2> _myList = new List<C2>();
public new List<C2> MyList { get { return _myList; } }
}
XmlAttributeOverrides xOver = new XmlAttributeOverrides();
XmlAttributes atts = new XmlAttributes(){ XmlIgnore=true};
xOver.Add(typeof(C1), "MyList", atts);
XmlSerializer ser = new XmlSerializer(typeof(C2),xOver);
ser.Serialize(Console.Out, new C2());
Publicado por
jmservera
en
16:49
1 comentarios
Enlaces a esta entrada
Etiquetas: Trucos