我有一个包含通用列表的班级团队:
[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<> 的类型在反序列化后是一个数组,为什么我不能再序列化我的 Team 对象?
谢谢