Вопрос

У меня есть класс, содержащий собственность Brush MyBrush отмечен как [XmlIgnore]. Анкет Тем не менее, он сериализован в потоке, что вызывает неприятности при попытке читать через XamlReader.

Я сделал несколько тестов, например, при изменении видимости свойства (на внутреннее) оно исчезло в потоке. К сожалению, я не могу сделать это в своем конкретном сценарии.

  1. У кого -нибудь была такая же проблема и?
  2. Вы видите способ обойти это?

Замечание: 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)] Раньше, но неверно истолковал его как атрибут времени дизайна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top