2011-01-01 3 views
7

Brush MyBrush[XmlIgnore]으로 표시된 속성이 포함 된 클래스가 있습니다. 그럼에도 불구하고 스트림에서 직렬화되어 XamlReader을 통해 읽을 때 문제가 발생합니다.C# 속성 XmlIgnore 및 XamlWriter 클래스 - XmlIgnore가 작동하지 않습니다.

몇 가지 테스트를 수행했습니다. 속성의 가시성을 내부로 변경하면 스트림에서 사라집니다. 불행히도 나는 나의 특별한 시나리오에서 이것을 할 수 없다.

  1. 누구에게도 동일한 문제가 있습니까?
  2. 이 문제를 해결할 방법이 있습니까?

비고 :

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

내 클래스 중 하나에서 내가 사용하는 속성 : C# 4.0은 지금까지의 내가이 내가 XamlSerialization을 테스트합니까 내 단위 테스트에서 방법이다

알 수 있습니다 Brush. 위 코드에서 Brush 객체 (직렬화 가능하지 않음)가 값이기 때문에이 단위 테스트가 실패합니다. Setter를 제거하면 (아래 참조) 단위 테스트가 통과됩니다.

XmlWriter (기본적으로 위와 동일한 테스트)을 사용하면 작동합니다. StringBuffer sb에서는 Setter가있을 때 Property Brush이 직렬화 된 것을 볼 수 있으며 제거되지 않은 경우 (설정자가 없기 때문에 속성을 무시할 확률이 높습니다). [XmlIgnore]의 기타 속성은 의도 한대로 무시됩니다.

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

XmlSerializer로 serialize 하시겠습니까? – gsharp

+0

소스 코드와 같은 더 많은 정보를 제공해야합니다. 문제는 재현 할 수 없다 :'[XmlIgnore]'속성은 내가 그것을 사용할 때마다 잘 동작한다. –

+0

일부 내용을 입력했습니다 –

답변

14

존의 의견이 맞습니다. 다른 속성이 있습니다. http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

나는 심지어 전에 속성 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 통해 온,하지만 디자인 타임 속성으로 잘못 해석 : 여기이 우수한 기사를 발견했다.

+0

+1 내 하루를 저장했습니다. :) –