WCF REST Service throwing Невозможно сериализовать параметр типа ошибки - PullRequest
1 голос
/ 15 февраля 2012

Я знаю, что на что-то похожее на это уже отвечали, но это не совсем то, что я получаю.

У меня есть модель 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 и копировать данные из возвращенного объекта в новый экземпляр?я не верю, что это единственный путь.

1 Ответ

2 голосов
/ 15 февраля 2012

Вы пытались отключить динамические прокси с:

context.ContextOptions.ProxyCreationEnabled = false;

Это обсуждается в разделе «Сериализация прокси POCO» здесь: http://msdn.microsoft.com/en-us/library/dd456853.aspx

...