Я знаю, что на что-то похожее на это уже отвечали, но это не совсем то, что я получаю.
У меня есть модель LINQ to Entity, состоящая из ряда динамически генерируемых классов, таких как Shows, Users и т. Д.
У меня есть служба WCF REST, которая возвращает различные объекты.Например, у меня есть следующий метод:
[WebGet(UriTemplate = "GetShow/{showid}")]
public Ent.Shows GetShow(string showid)
{
using (var context = new Ent.choobEntities())
{
int showID = Convert.ToInt32(showid);
List<Shows> shows = (from Shows in context.Shows
where Shows.Id == showID
select Shows).ToList();
if (shows.Count > 0)
return (Ent.Shows)shows.First();
else
return new Ent.Shows();
}
}
В приведенном выше случае, когда конкретное шоу не возвращается, я создаю новый пустой и при тестировании с моим клиентом REST я получаю:
<Shows xmlns="http://schemas.datacontract.org/2004/07/Entities" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Id>0</Id>
<ShowDescription i:nil="true"/>
<ShowImage i:nil="true"/>
<ShowTitle i:nil="true"/>
</Shows>
Это прекрасно.Однако, когда я получаю совпадение, я получаю самую раздражающую ошибку,
Невозможно сериализовать параметр типа 'System.Data.Entity.DynamicProxies.Shows, потому что это не точный тип' Entities. Показывает 'в сигнатуре метода и отсутствует в коллекции известных типов.Чтобы сериализовать параметр, добавьте тип в коллекцию известных типов для операции, используя ServiceKnownTypeAttribute
Я нашел предложения поставить [ServiceKnownType(typeof(<Shows>))]
везде, выше [ServiceContract]
и KnownType
и т.д. в самом классе.НИЧЕГО не работает.Конечно, есть способ без необходимости каждый раз заново создавать новый экземпляр Shows и копировать данные из возвращенного объекта в новый экземпляр?я не верю, что это единственный путь.