WCF REST服务抛出无法序列化类型错误的参数

时间:2012-02-15 01:05:49

标签: c# linq entity-framework-4 linq-to-entities

我知道之前已经回答过与此类似的事情,但它并不完全是我得到的。

我有一个LINQ to Entity模型,包含许多动态生成的类,如节目,用户等

我有一个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.Shows',并且不在已知类型集合中。要序列化参数,请使用ServiceKnownTypeAttribute将类型添加到操作的已知类型集合

我已找到建议将[ServiceKnownType(typeof(<Shows>))] 放在任何地方,[ServiceContract]KnownType等等。没有工作。当然有一种方法,无需每次都重新创建一个新的实例,并将数据从返回的实体复制到一个新实例?我不相信这是唯一的方法。

1 个答案:

答案 0 :(得分:2)

您是否尝试过禁用动态代理:

context.ContextOptions.ProxyCreationEnabled = false;

这将在下面的“序列化POCO代理”部分中讨论: http://msdn.microsoft.com/en-us/library/dd456853.aspx