逆シリアル化について疑問があります。

// Container の逆シリアル化コンストラクタ
public Container( SerializationInfo info, StreamingContext context )
{
 MessageBox.Show( "Begin deserializing Container" );

 child = (Child)info.GetValue( "child", typeof(Child) ); // child はフィールド

 MessageBox.Show( "End deserializing Container" );

 MessageBox.Show( child.Data ); // 値がおかしい
}

// Child の逆シリアル化コンストラクタ
public Child( SerializationInfo info, StreamingContext context )
{
 MessageBox.Show( "Deserializie Child" );
}

上記のようなコードで逆シリアル化を行ったとき、
Begin Container -> Child -> End Container
の順番で呼ばれると思ったら
Begin Container -> End Container -> Child でした。

Container のコンストラクタ内で child にアクセスすると未初期化の Child が入っていて、
Container のコンストラクタを抜けた後に Child のコンストラクタが呼ばれているようです。

いまいち動作に納得がいかないのですが、これに関するドキュメントなどご存知でしたら教えてください。