IXmlSerializable
benzer senin normal XML seri çocuk türlerini seçemezsiniz verilen bir ya hep ya hiç yaklaşımı hemen hemen beri uygulamaya biraz can sıkıcı. Ancak, sizi doğru anladıysam, IXmlSerializable
'u uygulamayan türler için XmlSerializer
'u manuel olarak oluşturarak istediğinizi elde edebilirsiniz.
Örneğin, ve Custom
uygulanmayan iki sınıfla, Default
ile başlıyorsak, bunu uygular.
public class Default // Uses default XML Serialization
{
public int Count { get; set; }
}
public class Custom : IXmlSerializable
{
public int Count { get; set; }
public XmlSchema GetSchema() { throw new NotImplementedException(); }
public void ReadXml(XmlReader reader)
{
reader.ReadToDescendant("Count");
this.Count = reader.ReadElementContentAsInt();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("Custom");
writer.WriteElementString("Count", this.Count.ToString());
writer.WriteEndElement();
}
}
Sonra üçüncü sınıf önceki örneklerde her birinin bir çocuğu vardır ve onu destekleyen ve diğer çocuk için varsayılan XML seri hale oluşturmak çocuk için
ReadXml/WriteXml
yöntemlerini çağıran bir şekilde
IXmlSerializable
uygulayan
Parent
oluşturun. .. Ben bu deneyin üzereyim ... bu kadar
static void Main()
{
var sb = new StringBuilder();
var serializer = new XmlSerializer(typeof(Parent));
serializer.Serialize(new StringWriter(sb), new Parent());
Console.WriteLine(sb);
var parent = (Parent)serializer.Deserialize(new StringReader(sb.ToString()));
Console.WriteLine("Parent.Custom.Count: {0}", parent.Custom.Count);
Console.WriteLine("Parent.Default.Count: {0}", parent.Default.Count);
}
Thx ama yüzeyde görünüyor:
serializes ve birParent
örneğini deserializes bir örnek program, örnek ettirmek için Tam olarak ihtiyacım olan şey .. –Küçük bir not: XmlSerializer'ı hem WriteXml()/ReadXml() yöntemlerinde Varsayılan ve Özel nesneler için kullanabilirsiniz. – synergetic
Bir alt nesneyi 'XmlReader' işlevini kullanarak seri hale getirdiğinizde, okuyucu işaretçisi doğru yerde (çocuk öğesinin sonunda) bitiyor mu, yoksa gecikmeli mi? – toddmo