C# Атрибут Xmlignore и XamlWriter Class - Xmlignore не работает
-
14-10-2019 - |
Вопрос
У меня есть класс, содержащий собственность 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 { ... }
}
Решение
Комментарий Джона верен. Есть (снова) другие атрибуты. Я нашел эту отличную статью здесь: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx
Я даже наткнулся на атрибут [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Раньше, но неверно истолковал его как атрибут времени дизайна.