У меня есть команда класса, которая содержит общий список:
[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[]
После этого мой unit test выходит из строя с помощью System.ExecutionEngineException, что означает, что служба WCF не может сериализовать массив. (возможно, потому, что он ожидал IList < > )
Итак, мой вопрос: кто-нибудь знает, почему тип моего IList < > является массивом после десериализации и почему я не могу сериализовать свой объект Team больше после этого?
Спасибо