C#属性XmlignoreおよびXamlwriterクラス-Xmlignoreが機能していない
-
14-10-2019 - |
質問
私は財産を含むクラスを持っています Brush MyBrush
ASとしてマークされています [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");
私のクラスの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)]
以前は、それを設計時間属性として誤って解釈しました。