私は自分のアプリケーション用にいくつかのテスト関数を書いています。
このテストコードでは、ローカルのJsonファイルからファイルストリームを作成し、独自のラップされたJsonDeserializer
クラスを使用してそれを逆シリアル化します。
using (FileStream fs = new FileStream(pathSource, FileMode.Open, FileAccess.Read))
{
JsonDeserializer<People>.DeserializeStream(fs);
JsonDeserializer<People>.DeserializeEvent += new EventHandler<DeserializeEventArgs<People>>(
delegate(object sender, DeserializeEventArgs<People> e)
{
id = e.DeserializeResult.Id;
});
}
そして、私のJsonDeseralizerクラスでは、逆シリアル化が次のように終了したときにイベントが発生します。
using (Stream readyToDeserializeStream = new MemoryStream(readyToDeserializeByteArray))
{
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T));
T resultObject = (T)jsonSerializer.ReadObject(readyToDeserializeStream);
if (DeserializeEvent != null) <-----this is null
{
DeserializeEvent(null, new DeserializeEventArgs<T>(resultObject));
}
}
しかし、問題は最初のコード部分にあります。イベントにハンドラーを追加した場合でも、イベントがnullであることがわかります(2番目のコード部分)。では、最初の部分でデリゲートイベントハンドラーと無名関数を間違って実行したのではないかと思いますか?
これについてのあなたの考えを共有してください、ありがとう。
=================更新======================
JsonDeserializerクラスでのDeserializeEventの定義
public static event EventHandler<DeserializeEventArgs<T>> DeserializeEvent;