我知道之前已经回答过与此类似的事情,但它并不完全是我得到的。
我有一个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
等等。没有工作。当然有一种方法,无需每次都重新创建一个新的实例,并将数据从返回的实体复制到一个新实例?我不相信这是唯一的方法。
答案 0 :(得分:2)
您是否尝试过禁用动态代理:
context.ContextOptions.ProxyCreationEnabled = false;
这将在下面的“序列化POCO代理”部分中讨论: http://msdn.microsoft.com/en-us/library/dd456853.aspx