Web services 无法从web服务返回具有导航属性的POCO对象?

Web services 无法从web服务返回具有导航属性的POCO对象?,web-services,entity-framework,serialization,poco,dto,Web Services,Entity Framework,Serialization,Poco,Dto,我正在使用POCO从DAL项目到实体项目自动生成实体。我目前不需要手动创建视图类 但是,我有一个问题-当我尝试从[WebMethod]返回具有导航属性的poco对象时,我得到以下错误: 无法序列化System.Collections.Generic.ICollection1[[Entities.Customer,Entities,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]类型的成员Entities.City.Customers,因为

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

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

无法序列化System.Collections.Generic.ICollection1[[Entities.Customer,Entities,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]类型的成员Entities.City.Customers,因为它是一个接口。

我试着写
context.ContextOptions.LazyLoadingEnabled=false
context.ContextOptions.ProxyCreationEnabled=false无效


如果在属性之前添加
[System.Xml.Serialization.XmlIgnore]
,则不会出现错误,但会丢失这些属性?

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

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

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


有几个步骤可以解决这个限制,你可以在这篇文章中找到:。在您的特定情况下,最简单的方法是将
Entities.City.Customers
作为一个具体类型的成员,例如
List
,而不是
ICollection

谢谢您参考这篇信息性文章。我无法将
ICollection
转换为
List
,因为POCO将其导航属性创建为ICollection,我看不出如何更改它。也许创建一个
CustomerView
类只是为了序列化(其他解决方案看起来也一样难看。)@BornToCode:我对POCO生成器不太熟悉,但很难相信它不允许代码自定义。它不是基于T4模板吗?你能定制一下吗?我也有这个问题。我将t4模板更改为使用列表而不是ICollection。然后需要更改构造函数。。。那么VerifyCaseInsensitiveTypeUnifications()方法将不会编译。。。感觉就像我要下到兔子洞里去寻找一些本该开箱即用的东西。有人有更好的剧本吗?