Giriş
Şu satırı dahil ederiz.
[XmlRoot],[XmlType],[XmlIgnore],[XmlElement], [XmlArray],[XmlArrayItem]
Circular Reference
Bu metod circular reference varsa hata veriyor. Fırlatılan exception'ın mesajı şöyle.
Constructor
Verilen nesne tipini XML olarak yazar ve okuyabilir.
Örnek
Şöyle yaparız
Örnek ver
Deserizalize Metodu - XMLReader
Object döndürdüğü için istenilen tipe cast etmek gerekir. XMLReader kullanır. Şöyle yaparız.
Şöyle yaparız.
Örnek ver
Serialize metodu - TextWriter
TextWriter allta XMLWrite'a çevrilir. Metodun içi şöyle.
Şöyle yaparız.
Elimizde şöyle bir kod olsun.
Şu satırı dahil ederiz.
using System.Xml.Serialization;
Anotasyon tabanlı bir serializer sınıfıdır. Açıklaması şöyle.By default this serializer takes only public fields, properties of a given type & sends them over wire. Any sensitive data must be explicitly opted out using XmlIgnore attribute.Kullanılan bazı anotasyonlar şöyle
[XmlRoot],[XmlType],[XmlIgnore],[XmlElement], [XmlArray],[XmlArrayItem]
Circular Reference
Bu metod circular reference varsa hata veriyor. Fırlatılan exception'ın mesajı şöyle.
A circular reference was detected while serializing an object of type Foo
Elimizde şöyle bir kod olsun. Bu sınıfı XmlSerializer ile XML'e çevirmek mümkün değil.public class Foo
{
...
public Foo Parent { get; set; }
public List<Foo> Children { get; set; }
}
Verilen nesne tipini XML olarak yazar ve okuyabilir.
Örnek
Şöyle yaparız
XmlSerializer serializer = new XmlSerializer(typeof(Foo));
Deserialize metodu - StreamÖrnek ver
Object döndürdüğü için istenilen tipe cast etmek gerekir. XMLReader kullanır. Şöyle yaparız.
using (XmlReader reader = ...))
{
return (T)serializer.Deserialize(reader);
}
Deserialize Metodu - TextReaderŞöyle yaparız.
string str= ...;
using (TextReader reader = new StringReader(str))
{
return (Foo)serializer.Deserialize(reader);
}
Şöyle yaparızusing (var reader = new StreamReader("config.xml"))
{
return (T)(serializer.Deserialize(reader);
}
Serialize metodu - StreamÖrnek ver
Serialize metodu - TextWriter
TextWriter allta XMLWrite'a çevrilir. Metodun içi şöyle.
public void Serialize(TextWriter textWriter, object o,
XmlSerializerNamespaces namespaces) {
XmlTextWriter xmlWriter = new XmlTextWriter(textWriter);
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.Indentation = 2;
Serialize(xmlWriter, o, namespaces);
}
ÖrnekŞöyle yaparız.
string Serialize(Type type, object objectToSerialize)
{
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
XmlSerializer serializer = new XmlSerializer(type);
serializer.Serialize(writer, objectToSerialize);
}
return builder.ToString();
}
Serialize metodu - XMLWriter
ÖrnekElimizde şöyle bir kod olsun.
public class DTO
{
[XmlIgnore]
public string additionalInformation;
[XmlElement(Order=1)]
public DateTime stamp;
[XmlElement(Order=2)]
public string name;
[XmlElement(Order=3)]
public double value;
[XmlElement(Order=4)]
public int index;
}
Şöyle yaparız.// 1. serialize normally
// this will allow us to omit the xmlns:xsi namespace
var ns = new XmlSerializerNamespaces();
ns.Add( "", "" );
XmlSerializer s1 = new XmlSerializer(typeof(DTO));
var builder = new System.Text.StringBuilder();
var settings = new XmlWriterSettings { OmitXmlDeclaration = true, Indent= true };
using ( XmlWriter writer = XmlWriter.Create(builder, settings))
{
s1.Serialize(writer, dto, ns);
}
Console.WriteLine("{0}",builder.ToString());
Console.WriteLine("\n");
Çıktı olarak şunu alırız.<DTO>
<stamp>2009-06-30T02:17:35.918Z</stamp>
<name>Marley</name>
<value>72.34</value>
<index>7</index>
</DTO>
Hiç yorum yok:
Yorum Gönder