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");
私のクラスの 1 つで、私は Property を使用しBrush
ます。Brush
上記のコードでは、オブジェクト (シリアル化できない) が値であるため、この単体テストは失敗します。Setter を削除すると (以下のように)、単体テストに合格します。
XmlWriter
(基本的に上記と同じテスト)を使用すると機能します。では、 Setter が存在するときにシリアル化され、削除されたときにシリアル化されていないStringBuffer sb
ことがわかりますProperty Brush
(おそらく、Setter がないためにプロパティを無視する別のチェック)。のその他のプロパティ[XmlIgnore]
は、意図したとおりに無視されます。
[XmlIgnore]
public Brush MyBrush
{
get { ..... }
// removed because of problem with Serialization
// set { ... }
}