1

我正在使用 POCO 将我的实体从 DAL 项目自动生成到实体项目。我目前不需要手动创建视图类。

但是我有一个问题 - 当我尝试从 a 返回具有导航属性的 poco 对象时,出现[WebMethod]以下错误:

Cannot serialize member Entities.City.Customers of type System.Collections.Generic.ICollection1[[Entities.Customer, Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] because it is an interface.

我尝试写作 context.ContextOptions.LazyLoadingEnabled = false;context.ContextOptions.ProxyCreationEnabled = false;但无济于事。

如果我 [System.Xml.Serialization.XmlIgnore]在属性之前添加,我不会收到错误,但是我会丢失这些属性?

4

1 回答 1

2

消息很清楚:序列化失败,因为您的Entities.City.Customers成员被声明为接口 ( ICollection)。

接口没有说明实现类型,它只定义了实现应该遵循的契约。因此,序列化程序不知道如何以序列化格式表示实现。

您可能认为根据您从自省获得的信息来反映类型和序列化并不难,但是当您尝试从这种表示中反序列化时就会出现问题。相同的表示可能对应于所有实现类型,在这种情况下,序列化程序应该选择什么作为具体类型?

有几个步骤可以解决这个限制,您可以在这篇文章中找到:接口属性的 XML 序列化。在您的特定情况下,最简单的方法是使Entities.City.Customers具体类型的成员像List<Customer>而不是ICollection<Customer>.

于 2012-09-02T15:13:12.937 回答