一般的なリストを保持するクラスチームがあります。
[DataContract(Name = "TeamDTO", IsReference = true)]
public class Team
{
[DataMember]
private IList<Person> members = new List<Person>();
public Team()
{
Init();
}
private void Init()
{
members = new List<Person>();
}
[System.Runtime.Serialization.OnDeserializing]
protected void OnDeserializing(StreamingContext ctx)
{
Log("OnDeserializing of Team called");
Init();
if (members != null) Log(members.ToString());
}
[System.Runtime.Serialization.OnSerializing]
private void OnSerializing(StreamingContext ctx)
{
Log("OnSerializing of Team called");
if (members != null) Log(members.ToString());
}
[System.Runtime.Serialization.OnDeserialized]
protected void OnDeserialized(StreamingContext ctx)
{
Log("OnDeserialized of Team called");
if (members != null) Log(members.ToString());
}
[System.Runtime.Serialization.OnSerialized]
private void OnSerialized(StreamingContext ctx)
{
Log("OnSerialized of Team called");
Log(members.ToString());
}
このクラスをWCFサービスで使用すると、次のログ出力が表示されます
OnSerializing of Team called
System.Collections.Generic.List 1[XXX.Person]
OnSerialized of Team called
System.Collections.Generic.List 1[XXX.Person]
OnDeserializing of Team called
System.Collections.Generic.List 1[XXX.Person]
OnDeserialized of Team called
XXX.Person[]
デシリアライズ後はmembers
配列であり、フィールドタイプはIList <>(?!)ですが、ジェネリックリストではなくなりました。このオブジェクトをWCFサービス経由で返送しようとすると、ログ出力が表示されます。
OnSerializing of Team called
XXX.Person[]
この後、ユニットテストがSystem.ExecutionEngineExceptionでクラッシュします。これは、WCFサービスがアレイをシリアル化できないことを意味します。(おそらくIList <>を期待していたため)
だから、私の質問は次のとおりです。IList<>のタイプが逆シリアル化後に配列になる理由と、その後チームオブジェクトをシリアル化できなくなる理由を誰かが知っていますか?
ありがとう