Question

J'ai une classe, contenant un Brush MyBrush de propriété marquée comme [XmlIgnore]. il est néanmoins publié en feuilleton dans le flux causer des problèmes lorsque vous essayez de lire via XamlReader.

J'ai fait des tests, par exemple lors du changement de la visibilité de la propriété (à interne), il est parti dans le cours d'eau. Malheureusement, je ne peux pas le faire dans mon scénario particulier.

  1. Est-ce que quelqu'un a le même problème et?
  2. Avez-vous une façon de contourner cela?

Remarque: C # 4.0 jusqu'à je peux dire

Ceci est une méthode de mon test unitaire où je testons le 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");

Dans une de mes classes, j'utiliser la propriété Brush. Dans le code ci-dessus cette unité échoue parce qu'un objet Tests de Brush (non sérialisable) est la valeur. Lorsque je supprime le Setter (comme ci-dessous), l'unité passe de test.

Utilisation du XmlWriter (essentiellement même test que ci-dessus), il fonctionne. Dans le StringBuffer sb je peux voir que Property Brush est publié en feuilleton lorsque le Setter est là et non lorsqu'ils sont retirés (très probablement une autre vérification en ignorant la propriété à cause de non setter). D'autres propriétés avec [XmlIgnore] sont ignorés comme prévu.

    [XmlIgnore]
    public Brush MyBrush
    {
        get { ..... }
        // removed because of problem with Serialization
        // set { ... }
    }
Était-ce utile?

La solution

Le commentaire de John est correct. Il y a (encore) d'autres attributs. J'ai trouvé cet excellent article ici: http: // blogs. msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

Je suis même venu à travers le [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] d'attribut avant , Mais mal interprété comme un attribut de temps de conception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top