XMLSerializer Sınıfı
Giriş
Şu satırı dahil ederiz.
1. Serialize edilecek sınıf public olmalı
2. Eğer kalıtım varsa en üstteki ata sınıf XmlInclude ile işaretlenmeli
Bu sınıf verilen nesneyi XML olarak yazar ve okuyabilir. Constructor metoduna serialize edilecek nesnenin type bilgilerini veriyoruz. Örnek:
Giriş
Şu satırı dahil ederiz.
using System.Xml.Serialization;
XmlSerializer sadece public property'leri yazar. Public dışındaki property'lere erişmek gerekmediği için sınıfın [Serializer] ile işaretli olmasına gerek yok. Yani şu koddaki anotasyon gereksiz.[Serializable]
public class Foo
{
...
}
1. Serialize edilecek sınıf public olmalı
2. Eğer kalıtım varsa en üstteki ata sınıf XmlInclude ile işaretlenmeli
[XmlInclude(typeof(DerivedMessage))]
public class BaseMessage
{
...
}
Constructor MetoduBu sınıf verilen nesneyi XML olarak yazar ve okuyabilir. Constructor metoduna serialize edilecek nesnenin type bilgilerini veriyoruz. Örnek:
new XmlSerializer(typeof(MyClass))
Şu kullanım şekli yanlış çünkü parametre olarak System.Type tipi bekleniyor.
Şöyle yaparız.
İçine bir XmlWriter alır.
XmlWriter + XmlSerializerNamespaces
XmlSerializer mySerializer = new XmlSerializer(MyClass);
Serizalize Metodu - TextWriterŞöyle yaparız.
TextWriter textWriter = new StreamWriter(@"Serialized.xml");
xmlSerializer.Serialize(textWriter,obj);
textWriter.Close();
Serizalize Metodu - XmlWriterİçine bir XmlWriter alır.
xmlSerializer.Serialize(xmlWriter, obj);
Bu sınıf XML'in ilk düğümüne şu namespace özelliğini ekler. Bunlar "default namespace" olarak anılırlar.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
Şöyle bir XML çıktısı alırız.<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
Elimizde şöyle bir sınıf olsun.
[XmlRoot("Root", Namespace = "myNamespace")]
public partial class MyClass
{
public MyClass()
{
this.Xmlns = new XmlSerializerNamespaces();
this.Xmlns.Add(string.Empty, "myNamespace");
}
[XmlNamespaceDeclarations()]
public XmlSerializerNamespaces Xmlns = null;
}
Bu sınıfı şöyle seralize ederiz.
serializer.Serialize(xmlWriter, obj,obj.
Xmlns);
Şöyle bir XML çıktısı alırız.
<Root xmlns="myNamespace" />
Hiç yorum yok:
Yorum Gönder