2011-01-01 9 views
7

Brush MyBrush[XmlIgnore] olarak işaretlenmiş bir özellik içeren bir sınıfım var. Yine de, XamlReader aracılığıyla okumaya çalışırken sorun oluĢturan dizinde oluĢturulur. Bazı testler yaptım, örn. Mülkün görünürlüğünü değiştirirken (dahili), akışta gider. Maalesef bu senaryoda bunu yapamıyorum.C# Öznitelik XmlIgnore ve XamlWriter sınıfı - XmlIgnore çalışmıyor

  1. Aynı sorunu olan var mı?
  2. Bu konu üzerinde çalışmanın herhangi bir yolunu görüyor musunuz?

Not:

  // buffer to a StringBuilder 
      StringBuilder sb = new StringBuilder(); 
      XmlWriter writer = XmlWriter.Create(sb, settings); 
      XamlDesignerSerializationManager manager = new XamlDesignerSerializationManager(writer) {XamlWriterMode = XamlWriterMode.Expression}; 

      XamlWriter.Save(testObject, manager); 
      xml = sb.ToString(); 
      Assert.IsTrue(!String.IsNullOrEmpty(xml) && !String.IsNullOrEmpty(xml), "Xaml Serialization failed for " + testObject.GetType() + " no xml string available"); 

      xml = sb.ToString(); 
      MemoryStream ms = xml.StringToStream(); 
      object root = XamlReader.Load(ms); 
      Assert.IsTrue(root != null, "After reading from MemoryStream no result for Xaml Serialization"); 

benim sınıfların birinde kullandığım Mülkiyet: C# 4.0 bildiğim kadarıyla bu ben XamlSerialization test ederim benim Birim Testi gelen bir yöntemdir

söyleyebilir Brush. Yukarıdaki kodda bu Birim Testleri başarısız olur, çünkü Brush nesnesi (seri hale getirilemez) değerdir. Setter'ı çıkardığımda (aşağıdaki gibi), Birim Testi geçer.

XmlWriter'u (yukarıdakiyle aynı test) kullanarak çalışır. StringBuffer sb'da, Property Brush'un, Ayarlayıcı oradayken ve kaldırıldığında değil (büyük olasılıkla ayarlanmış olmadığından dolayı Mülk'ü göz ardı eden başka bir denetim) serileştirildiğini görebiliyorum. [XmlIgnore] ile Diğer Özellikler amaçlandığı gibi göz ardı edilir.

[XmlIgnore] 
    public Brush MyBrush 
    { 
     get { ..... } 
     // removed because of problem with Serialization 
     // set { ... } 
    } 
+3

XmlSerializer ile seri hale getiriyor musunuz? – gsharp

+0

Daha fazla bilgi vermeniz gerekir (kaynak kodu gibi). Sorun şu ki tekrarlanamaz: '[XmlIgnore]' özniteliği, kullandığım her seferinde benim için iyi çalışır. –

+0

Bazı ayrıntıları sağladım –

cevap

14

John'un yorumu doğru. Başka özellikler var. http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

Hatta önce özniteliği [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] rastladı, ancak bir tasarım zamanı niteliği olarak bunu yanlış yorumlandığını: Burada bu mükemmel makale bulunamadı.

+0

+1 Benim günümü kurtardım :) –