2011-01-01 20 views
7

Tôi có một lớp, chứa một thuộc tính Brush MyBrush được đánh dấu là [XmlIgnore]. Tuy nhiên nó được tuần tự hóa trong luồng gây ra sự cố khi cố gắng đọc qua XamlReader.C# Thuộc tính lớp XmlIgnore và XamlWriter - XmlIgnore không hoạt động

Tôi đã thực hiện một số thử nghiệm, ví dụ: khi thay đổi chế độ hiển thị của Thuộc tính (thành bên trong) nó sẽ biến mất trong luồng. Thật không may tôi không thể làm điều này trong kịch bản cụ thể của tôi.

  1. Có ai có cùng vấn đề và không?
  2. Bạn có thấy cách nào để giải quyết vấn đề này không?

Ghi chú: C# 4.0 như xa tôi có thể nói

Đây là một phương pháp từ Test Đơn vị của tôi, nơi tôi kiểm tra 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"); 

Trong một lớp học của tôi, tôi sử dụng tài sản Brush. Trong đoạn mã trên, kiểm thử đơn vị này không thành công vì một đối tượng Brush (không thể tuần tự hóa) là giá trị. Khi tôi loại bỏ Setter (như dưới đây), Bài kiểm tra Đơn vị sẽ trôi qua.

Sử dụng XmlWriter (về cơ bản thử nghiệm giống như trên) hoạt động. Trong số StringBuffer sb Tôi có thể thấy rằng Property Brush được đăng theo thứ tự khi Setter có ở đó chứ không phải khi bị xóa (rất có thể một lần kiểm tra khác bỏ qua Thuộc tính vì không có thiết lập). Các thuộc tính khác với [XmlIgnore] bị bỏ qua như dự định.

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

Bạn có sắp xếp hàng loạt bằng XmlSerializer không? – gsharp

+0

Bạn cần cung cấp thêm thông tin (như mã nguồn). Vấn đề như nó đứng là không thể tái sản xuất: các '[XmlIgnore]' thuộc tính hoạt động tốt cho tôi mỗi khi tôi đã từng sử dụng nó. –

+0

Tôi đã cung cấp một số chi tiết –

Trả lời

14

Nhận xét của John là chính xác. Có (một lần nữa) các thuộc tính khác. Tôi đã tìm thấy bài viết tuyệt vời này tại đây: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

Tôi thậm chí đã xem qua thuộc tính [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] trước , nhưng hiểu sai nó là thuộc tính thời gian thiết kế.

+0

+1 Đã lưu ngày của tôi :) –

Các vấn đề liên quan