Невозможно сериализовать параметр типа «System.Linq.Enumerable…» при использовании WCF, LINQ, JSON.
У меня есть служба WCF. Он использует Linq-to-objects для выбора из словаря. Тип объекта прост:
public class User
{
public Guid Id;
public String Name;
}
Существует коллекция хранится вDictionary<Guid,User>
.
Я хочу иметь WCFOperationContract
метод как это:
public IEnumerable<Guid> GetAllUsers()
{
var selection = from user in list.Values
select user.Id;
return selection;
}
Он компилируется нормально, но когда я запускаю его, я получаю:
Сервер обнаружил ошибку при обработке запроса. Сообщение об исключении: «Невозможно сериализовать параметр типа» 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] 'в сигнатуре метода и отсутствует в коллекции известных типов. Чтобы сериализовать параметр, добавьте тип в коллекцию известных типов для операции, используя ServiceKnownTypeAttribute. '. Смотрите журналы сервера для более подробной информации.
Как я могу заставить выбор бытьIEnumerable<Guid>
?
РЕДАКТИРОВАТЬ
Если я изменю код, чтобы сделать это, он работает хорошо - хорошая совместимость.
public List<Guid> GetAllUsers()
{
var selection = from user in list.Values
select user.Id;
return new List<Guid>(selection);
}
Есть ли способ для меня, чтобы избежать создания / созданияList<T>
?