2011-01-01 15 views
7

Mam klasę, zawierającą właściwość Brush MyBrush oznaczoną jako [XmlIgnore]. Mimo to jest serializowany w strumieniu powodującym problemy podczas próby odczytu przez XamlReader.C# Atrybut XmlIgnore i XamlWriter class - XmlIgnore nie działa

Zrobiłem kilka testów, np. podczas zmiany widoczności właściwości (na wewnętrzne) nie ma go w strumieniu. Niestety nie mogę tego zrobić w moim konkretnym scenariuszu.

  1. Czy ktoś miał ten sam problem i?
  2. Czy widzisz jakiś sposób obejścia tego?

Uwaga: C# 4.0, jak daleko mogę powiedzieć

Jest to metoda z moich testów jednostkowych gdzie ja przetestować XamlSerialization:

  // 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"); 

W jednej z moich klas I użyć właściwości Brush. W powyższym kodzie testy jednostek kończą się niepowodzeniem, ponieważ wartością jest obiekt Brush (bez możliwości szeregowania). Kiedy usunę Settera (jak poniżej), Test Jednostki przechodzi.

Używając XmlWriter (w zasadzie ten sam test co powyżej) działa. W StringBuffer sb widzę, że Property Brush jest serializowany, gdy jest tam Setter, a nie po usunięciu (najprawdopodobniej kolejna kontrola ignorująca właściwość z powodu braku settera). Inne właściwości z [XmlIgnore] są ignorowane zgodnie z przeznaczeniem.

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

Czy seryjnie używasz XmlSerializer? – gsharp

+0

Musisz podać więcej informacji (np. Kod źródłowy). Problem w obecnej formie nie jest odtwarzalny: atrybut '[XmlIgnore]' działa dobrze dla mnie za każdym razem, kiedy go używałam. –

+0

Podałem pewne szczegóły. –

Odpowiedz

14

Komentarz Johna jest poprawny. Są (znowu) inne atrybuty. Znalazłem ten wspaniały artykuł tutaj: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

Nawet natknąłem się na atrybut [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] przed , ale źle zinterpretowałem go jako atrybut czasu projektu.

+0

+1 Zapisałam mój dzień :) –

Powiązane problemy