У меня есть класс, содержащий свойство Brush MyBrush
, помеченное как [XmlIgnore]
. Тем не менее он сериализуется в потоке, вызывая проблемы при попытке чтения через XamlReader
.
Я провел несколько тестов, например при изменении видимости свойства (на внутреннее) оно уходит в поток. К сожалению, я не могу сделать это в моем конкретном сценарии.
- Кто-нибудь имел такую же проблему и?
- Видите ли вы способ обойти это?
Примечание: C # 4.0, насколько я могу судить
Это метод из моего модульного теста, где я тестирую 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");
В одном из моих занятий я использую свойство Brush
. В приведенном выше коде это модульное тестирование завершается неудачно, поскольку значением является объект Brush
(не сериализуемый). Когда я удаляю Сеттер (как показано ниже), модульное тестирование проходит.
Использование XmlWriter
(в основном тот же тест, что и выше) работает. В StringBuffer sb
я вижу, что Property Brush
сериализуется, когда сеттер есть, а не когда его удаляют (скорее всего, другая проверка игнорирует свойство из-за отсутствия сеттера). Другие свойства с [XmlIgnore]
игнорируются, как предполагалось.
[XmlIgnore]
public Brush MyBrush
{
get { ..... }
// removed because of problem with Serialization
// set { ... }
}