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.
- Có ai có cùng vấn đề và không?
- 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 { ... }
}
Bạn có sắp xếp hàng loạt bằng XmlSerializer không? – gsharp
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ó. –
Tôi đã cung cấp một số chi tiết –