3

私は自分のアプリケーション用にいくつかのテスト関数を書いています。
このテストコードでは、ローカルの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;
4

0 に答える 0