C# 'da, bir temel sınıf veya önceden türünü bilmeden türetilmiş birkaç sınıftan herhangi biri olabilecek bir nesneyi serileştirmek için XmlSerializer
'u nasıl kullanırım?Bir XmlSerializer'ı, türü önceden bilmeden bir temel veya türetilmiş bir sınıf olabilecek bir nesneyi serileştirmek için nasıl kullanırım?
Tüm türetilmiş sınıflarım ek veri üyeleri ekliyor. Sınıf nesnelerini serileştirip seri hale getirebilen basit bir GUI yaptım. Nesneleri, kalıtılan sınıfın (veya sadece temel sınıfın), kullanıcının hangi alanları doldurmak için seçtiğine göre uygun şekilde serileştirir.
Serileştirmeyle ilgili sorunum yok; Sorun, serileştirme. Sınıfı önceden bilmeden XmlSerializer
serisini doğru türetilmiş sınıfa nasıl sahip olabilirim? Şu anda XML dosyasının ilk düğümünü okumak ve onu sınıftan belirlemek için bir XmlReader
oluşturuyorum ve amaçlarım için çalışıyor gibi görünüyor, ama son derece temkinli bir çözüm gibi görünüyor.
Aşağıda bazı örnek kodlar yayınladım. Baska öneri?
BaseType objectOfConcern = new BaseType();
XmlSerializer xserializer;
XmlTextReader xtextreader = new XmlTextReader(DEFAULT_FILENAME);
do { xtextreader.Read(); } while (xtextreader.NodeType != XmlNodeType.Element);
string objectType = xtextreader.Name;
xtextreader.Close();
FileStream fstream = new FileStream(DEFAULT_FILENAME, FileMode.Open);
switch (objectType)
{
case "type1":
xserializer = new XmlSerializer(typeof(DerivedType));
objectOfConcern = (DerivedType)xserializer.Deserialize(fstream);
//Load fields specific to that derived type here
whatever = (objectOfConcern as DerivedType).NoOfstreamubordinates.ToString();
case "xxx_1":
//code here
case "xxx_2":
//code here
case "xxx_n":
//code here
//and so forth
case "BaseType":
xserializer = new XmlSerializer(typeof(BaseType));
AssignEventHandler(xserializer);
objectOfConcern = (BaseType)xserializer.Deserialize(fstream);
}
//Assign all deserialized values from base class common to all derived classes here
//Close the FileStream
fstream.Close();
Çok serin, teşekkürler! İyi örnek için –