2013-03-15 16 views
7

Önceden var olan bir nesnede alanları XML'den alanlara eşlemek için Linq kullanabileceğimi biliyorum. .NET Framework'te (veya diğer kitaplıklarda) bu daha az manuel olan herhangi bir işlev var mı.C# - Var olan nesneyi XML ile nemlendirin

Yazıyorum (ve HydrateFromXml AutoMapper yaptığı gibi biraz davranmaya var) istiyorum:

var myObject = new MyObject(/*ctor args*/); 

myObject = myObject.HydrateFromXml(string xml); 

Düzenleme:

Ben dekoratör desen ya da burada basit bir kapsayıcı nesnesi kullanmak olabilir mi? İhtiyaç duyduğum ince taneli inşaat kontrolüne izin veren bir soyutlama ile sarılmış bir türe direkt olarak deserialize olur mu?

+1

Seri hale getirme öznitelikleriyle ilgili özellikleri biraz benzer bir şekilde yaptım. Ardından, işaretlenmiş özellikleri yansıtan ve bunları ayarlamak için içerik için xml'de dolaşan bir yöntem yazın. Constrcutor args ve Hydration arasında hiçbir geçiş olmadığını varsayarak, onu tersine çevirmekle ilgili olarak söylüyorum. Bir tanesini almak için serileştirme kullanın ve sonra kurucu hakemlerini ayarlayın. –

+0

Bu bağlamda “hidratın” ne anlama geldiğini sorgulayabilir miyim? –

+0

@KennethK. Bence bu sorunun özüdür. MyObject öğesindeki özelliklerin XML'deki karşılık gelen değerlerle başlatılmasını istiyorum, ancak bunu yapmak programın nasıl yapılacağını anlatmak anlamına gelir. Alanların elle eşlenmesini içermeyen bir şey arıyordum, ama bunun mümkün olmadığı anlaşılıyor. – Ben

cevap

5

Bunu geride kalan XmlSerializer kullanabilirsiniz:

var serializer = new XmlSerializer(typeof(MyObject)); 

object result; 
using (TextReader reader = new StringReader(xml)) 
{ 
    result= serializer.Deserialize(reader); 
} 

var myObject = result as MyObject; 

bir durum için nesne örneği zaten bu soruyu kontrol var olduğun zaman: Hızlı bir seçenek olarak Deserializing properties into a pre-existing object

+0

Son satırda olduğu gibi gerek yok - sadece bir "olacak" MyObject', böylece sadece yayınlayabilirsiniz. –

+2

Bu soru soruma cevap vermiyor gibi görünmektedir çünkü 'sonuç' seri hale getirme adımından önce mevcut değildir. Önceden var olan bir nesne örneğini hiddetlemek istiyorum. – Ben

+0

Yani MyObject’in beyanı hiç yok mu? – MarcinJuraszek

1

, sen AutoMapper kullanabilirsiniz. Yeni bir örneğe serileştirmek için XmlSerializer'ı kullanın ve sonra yeni oluşturulan örnekle gerekli örneğinize eşlemek için AutoMapper'ı kullanın.

İlgili konular