venerdì 7 ottobre 2011

How To: Serilize Xml Attribute

Uno dei problemi ricorrenti della serializzazione, è come riuscire a serializzare degli attributi e cosa non da poco, come realizzare degli attributi serilizzabili in una classe.

Il file di Ouput di questo esempio è il seguente

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfEntity
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<entity>
<id isKey="true" isUnique="false">1</id>
<name>11</name>
<description>22</description>
<EntityExtender>
<user>fabio</user>
<creatioDateTime>
2011-10-07T16:27:56.1470345+02:00
</creatioDateTime>
</EntityExtender>
</entity>
<entity>
<id isKey="true" isUnique="false">2</id>
<name>33</name>
<description>44</description>
<EntityExtender>
<user>fabio</user>
<creatioDateTime>
2011-10-07T16:27:56.1470345+02:00
</creatioDateTime>
</EntityExtender>
</entity>
</ArrayOfEntity>



Non è difficile notare che il campo ID presenta due attributi isKey e isUnique.

Per ottenere questo risultato è necessario implementare quanto segue:

public class entityExtender
{
public string user;
public DateTime creatioDateTime;
}

public class entity
{

public class idField
{
[XmlText]
public int idFieldvalue;
[XmlAttribute(AttributeName = "isKey")]
public bool isKey = true;
[XmlAttribute(AttributeName = "isUnique")]
public bool isUnique = false;

}

private string _name;
private string _description;
private entityExtender _entityExtender;

public idField id;


public string name
{
get { return _name; }
set { _name = value; }
}

public string description
{
get { return _description; }
set { _description = value; }
}

public entityExtender EntityExtender
{
get { return _entityExtender; }
set { _entityExtender = value; }
}
}


public class entities : List<entity>
{

}



La parte complessa rimane proprio nella nested che rappresenta il campo id.

public class idField
{
[XmlText]
public int idFieldvalue;
[XmlAttribute(AttributeName = "isKey")]
public bool isKey = true;
[XmlAttribute(AttributeName = "isUnique")]
public bool isUnique = false;

}


In questa classe sono presenti il valore del nodo è idFieldValue e per far ciò è necessario utilizzare l'attributo [XMLText], mentre isKey e isUnique sono [XmlAttribute].

Un xmlText non è diverso dalla rappresentazione di un nodo TEXT ( il banale valore
del nodo testo ).

static void Main(string[] args)
{
element.entities ets = new testSerializer.element.entities();

element.entityExtender ex = new
testSerializer.element.entityExtender()
{
creatioDateTime = DateTime.Now, user = "fabio"
};

element.entity etx1 = new testSerializer.element.entity();
etx1.id = new testSerializer.element.entity.idField()
{ idFieldvalue = 1, isKey = true };
etx1.name = "11";
etx1.description = "22";
etx1.EntityExtender = ex;

ets.Add(etx1);

element.entity etx2 = new testSerializer.element.entity();
etx2.id = new testSerializer.element.entity.idField()
{ idFieldvalue = 2, isKey = true };
etx2.name = "33";
etx2.description = "44";
etx2.EntityExtender = ex;

ets.Add(etx2);

Serializer.XmlHelpers.XmlDeSerializerTool.Serialize<element.entities>http://www.blogger.com/img/blank.gif
(@"demo.xml",ets);
}


Questo è il main che genera l'xml.

Per il serializer vi suggerisco di recuperare il IL MIO !

Nessun commento: