私の心がゆっくりと流れている間に、私はゆっくりとエッジを擦っています。オーバーライドXmlSerializerの逆シリアル化が呼び出されません
XmlSerializerを拡張する必要があります。何らかの理由で、逆シリアル化通知がサポートされていません。
私は、次のコードを持っている:
public class NotificationXmlSerializer : XmlSerializer
{
public NotificationXmlSerializer(Type type)
: base(type)
{
}
protected override object Deserialize(XmlSerializationReader reader)
{
var x = base.Deserialize(reader);
var methods = x.GetType().GetMethods().Where(method => method.GetCustomAttributes(true).Any(attr => attr is OnDeserializedAttribute));
return x;
}
}
そして、このようにそれを使用します。私は私のデシリアライズのオーバーライドにブレークポイントを置けば
using (MemoryStream fs = new MemoryStream())
{
var x = new NotificationXmlSerializer(typeof(int));
x.Serialize(fs, 5);
fs.Seek(0, SeekOrigin.Begin);
var y = x.Deserialize(fs);
}
をしかし、それがヒットされることはありません!たとえ私が意図的に例外を投げたとしても、プログラムの機能は正常なので、絶対にヒットしないと確信しています。
なぜ私は内部のメソッドをオーバーライドさせるのですか?私はそれによって何かに影響を与えることなく、デシリアライズしますか?
私は間違っていますか?
敬具、マックス
+1リフレクターでどれくらいの距離をとっているのですか?内部の流れは非常に複雑です。私はこのシナリオでオーバーライドに頼るようOPにアドバイスしません。 – BrokenGlass
ありがとう。私はMSDNをもっとよく読んでいなければならないことを知っていましたが、この場合、機能を拡張する従来の方法によく似ていました。つまり、配管を大量に行う内部メソッドで、単純化された引数でDeserializeを呼び出しました。私は論理的に見えるものでなければならないという私の前提にだまされました。 – Max
@Max拡張性が必要な場合は、** 'XmlSerializer'について**忘れてしまいます。そして、あなたのシリアライザを使用してください。私の知る限り、他に実行可能な選択肢はありません。 –