WCF: serializando e desserializando coleções genéricas
Eu tenho uma equipe de classe que possui uma lista genérica:
[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());
}
Quando uso essa classe em um serviço WCF, recebo a seguinte saída de log
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[]
Após a desserializaçãomembers
é uma matriz e não é mais uma lista genérica, embora o tipo de campo seja IList <> (?!) Quando tento enviar esse objeto de volta pelo serviço WCF, recebo a saída do log
OnSerializing of Team called
XXX.Person[]
Depois disso, meu teste de unidade falha com uma System.ExecutionEngineException, o que significa que o serviço WCF não pode serializar a matriz. (talvez porque esperasse um IList <>)
Então, minha pergunta é: alguém sabe por que o tipo do meu IList <> é uma matriz após a desserialização e por que não consigo mais serializar meu objeto Team depois disso?
obrigado