2017-09-16 67 views
0

我有一个Web API与本地数据库,我使用我的数据库模型创建了控制器。在我有外键的所有类模型中,我都不断收到这个错误。'ObjectContent'类型无法序列化

类型 'System.Data.Entity.DynamicProxies.Product_9B61A36C2BD0C13AA03EB8B09F2678CB0976D5E84057A4447E1FAF98EBDB7865' 数据合同名称 'Product_9B61A36C2BD0C13AA03EB8B09F2678CB0976D5E84057A4447E1FAF98EBDB7865:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' 预计不会。如果使用DataContractSerializer,则考虑使用DataContractResolver,或者将未知的任何类型静态添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给序列化程序的已知类型列表中。

我尝试使用[DataContract][KnownType ..][数据成员]但它一直得到这个错误。你知道我必须做什么吗?

这是我的班级代码之一:

namespace WholesaleRetailProject 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Runtime.Serialization; 

    [KnownType(typeof(Category))] 
    [KnownType(typeof(ProductExport))] 
    [DataContract] 
    public partial class Product 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public Product() 
     { 
      this.ProductExport = new HashSet<ProductExport>(); 
     } 

     public int ProductID { get; set; } 
     public int ProductCode { get; set; } 
     public string ProductName { get; set; } 
     public double ProductSellPrice { get; set; } 
     public int ProductCategoryID { get; set; } 
     public int ProductStock { get; set; } 

     [DataMember] 
     public virtual Category Category { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     [DataMember] 
     public virtual ICollection<ProductExport> ProductExport { get; set; } 
    } 
+0

'ProductExport'是您定义的类吗? –

+0

此外,还有一个有用的快捷方式,因此您不必构造一个构造函数:'public virtual ICollection ProductExport {get;组; } = new HashSet ();' –

回答

0

这是一个非常不好的做法,使用全域模型通过控制器来传递数据。您可以创建自定义Dto,然后使用automapper将域模型中的数据绑定到dto。在dto中,您可以删除“部分”和“虚拟”关键字,并排除必要的对象属性。

相关问题