質問

私は財産を含むクラスを持っています Brush MyBrush ASとしてマークされています [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");

私のクラスの1つでは、プロパティを使用しています 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/xamwriter.aspx

属性に出会いました [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 以前は、それを設計時間属性として誤って解釈しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top