No se puede serializar el parámetro de tipo 'System.Linq.Enumerable ...' cuando se usa WCF, LINQ, JSON
Tengo un servicio WCF. Utiliza Linq-to-objects para seleccionar de un Diccionario. El tipo de objeto es simple:
public class User
{
public Guid Id;
public String Name;
}
Hay una colección de almacenados en unDictionary<Guid,User>
.
Quiero tener un WCFOperationContract
método como este:
public IEnumerable<Guid> GetAllUsers()
{
var selection = from user in list.Values
select user.Id;
return selection;
}
Se compila bien, pero cuando lo ejecuto obtengo:
El servidor encontró un error al procesar la solicitud. El mensaje de excepción es 'No se puede serializar el parámetro de tipo' System.Linq.Enumerable + WhereSelectEnumerableIterator2[Cheeso.Samples.Webservices._2010.Jan.User,System.Guid]' (for operation 'GetAllUsers', contract 'IJsonService') because it is not the exact type 'System.Collections.Generic.IEnumerable
1 [System.Guid] 'en la firma del método y no está en la colección de tipos conocidos. Para serializar el parámetro, agregue el tipo a la colección de tipos conocidos para la operación utilizando ServiceKnownTypeAttribute. '. Ver los registros del servidor para más detalles.
¿Cómo puedo obligar a la selección a ser unIEnumerable<Guid>
?
EDITAR
Si modifico el código para hacer esto, funciona bien, buena interoperabilidad.
public List<Guid> GetAllUsers()
{
var selection = from user in list.Values
select user.Id;
return new List<Guid>(selection);
}
¿Hay alguna manera de evitar la creación / creación de instancias de laList<T>
?