Tengo un tipo de colección personalizada muy simple que hereda de la Lista <> y utiliza un CollectionDataContract.¿WCF y DataContractSerializer serializan de forma diferente los tipos de colección CollectionDataContract?
Cuando uso DataContractSerializer.WriteObject para serializarlo, respeta el atributo CollectionDataContract de la forma que esperaba; sin embargo, cuando lo uso como un tipo de devolución para un método WCF, obtengo el ArrayOfFoo predeterminado.
Me pregunto si hay alguna decoración que me falta en el contrato de servicio.
Detalles:
[DataContract(Namespace = "")]
public class Foo
{
[DataMember]
public string BarString { get; set; }
}
[CollectionDataContract(Namespace = "")]
[Serializable]
public class FooList : List<Foo> {}
Si tan sólo una instancia de un Foo y luego usar DataContractSerializer.WriteObject a serializarlo, me sale lo que se espera:
<FooList>
<Foo>
<BarString>myString1</BarString>
</Foo>
</FooList>
Sin embargo, si tengo una servicio con un método como este ...
[ServiceContract Name = "MyService"]
public interface IMyService
{
[OperationContract, WebGet(UriTemplate = "foos/")]
FooList GetAllFoos();
}
y luego hacer un GET para http://www.someEndpoint.com/foos/, me sale esto:
<ArrayOfFoo>
<Foo>
<BarString>myString1</BarString>
</Foo>
</ArrayOfFoo>
También he intentado especificando Name = "MyFooListName" en el atributo CollectionDataContract. Los mismos resultados: DataContractSerializer obtiene la nota; WCF no.
Creo que sí, convierte listas en matriz. –
Tiene razón en que una lista se serializa en una matriz si no personaliza el tipo de colección; Lo que estoy tratando de averiguar es si hay una manera de lograr que WCF respete mi CollectionDataContract. – pisomojado