2009-10-15 21 views
6

Yani var buna benzer yapıya sahip bir xml:C# Kısmi seri kaldırma

<MyObject> 
    <PropertyA>Value</PropertyA> 
    <PropertyB>Value</PropertyB> 
    <PropertyC>Value</PropertyC> 
    <ArrayOfOtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
     <OtherObject> 
      <PropertyX>Value</PropertyX> 
      <PropertyY>Value</PropertyY> 
      <PropertyZ>Value</PropertyZ> 
     </OtherObject> 
    </ArrayOfOtherObject> 
</MyObject> 

Ben ArrayOfOtherObject MyObject serisini ancak bir yolu var mı? Ve sonra daha sonra ihtiyaç duyulduğunda ArrayOfOtherObject tembel bir yük yapmak?

Genellikle XmlDeserialization kullanıyorum, ancak AFAIK her zaman her şeyi yükler.

Teşekkürler! ikili seri kaldırma işlevselliği tarafından tanınan Sen özel kurucu kullanabilirsiniz

+2

, dürüst olmak gerekirse, ve serisi kaldırılmaya hepsi bu. –

+0

+1 iyi soru Carlo – toddmo

cevap

2
+0

Bu 'BinaryFormetter' değil mi? xml, genellikle * çok * farklı görünen "IXmlSerializable" şeklindedir. –

+0

Evet, Mark, haklısınız ama IXmlSerializable ayrıca kolayca ReadXml yöntemiyle genişletilebilir. –

+1

Peki bunun için nasıl giderim? Bu konuda gerçekten noob var, çünkü sadece düzenli seriyi tamamladım (tüm nesneyi seriden ayırmak) ve sadece XmlIgnore kullanıyorum. MSDN'de bunu nasıl kullanacağımı araştırdım, ancak oldukça karmaşıktı ve işe yaramayacaktım (bazen, aşırı karmaşık örneklerinden dolayı MSDN'den nefret ediyorum). – Carlo

0

Eğer xml deserializing bahsediyorsun

XML durumunda
protected MyObject(SerializationInfo info, StreamingContext context) 
{ 
//here some elements you can load right now, and some other to store in so-to-say string in order to load later 
} 

buraya özel serileştirme bir örnektir ayrıştırıldığı gibi, tüm xml dosyasını belleğe yüklemek zorunda kalmazsınız ya da somut nesneye erişmeye çalışırken onu seri hale getiremezsiniz?

Bu DOM aksine SAX bir uygulamayı da incelemek yardımcı olabilir: veri hacmi en basit yaklaşım için gidiş daha iyi olurdu devasa olmadığı sürece

http://www.saxproject.org/

+0

MyObject ürününü seri hale getirmem gerekiyor, ancak ArrayOfOtherObject ürününü değil. Ve daha sonra, kullanıcı tarafından talep edilirse, ArrayOfOtherObject'i yüklemem gerekecek, ancak başlangıçta yalnızca MyObject. – Carlo

+0

Başka bir düşünce, bir RDBMS'nin bu verileri istediğiniz şekilde saklamak ve almak için daha uygun olacağıdır. Bu verileri ilişkisel bir veritabanına aktarabilir ve sonra LINQ kullanarak SQL'e sorgulayabilirsiniz (örneğin hatırladığım kadar tembel yükleme kullanır). – PabloC