' ObjectContent'类型无法序列化

时间:2017-09-16 22:15:04

标签: c# entity-framework asp.net-web-api

我有一个带有本地数据库的Web API,我使用我的数据库模型创建了控制器。在我有外键的所有类模型中,我一直收到这个错误。

  

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

我尝试使用 [DataContract] [KnownType ..] [DataMember] ,但它一直收到此错误。你知道我要做什么吗?

这是我的课程代码之一:

    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; }
    }

1 个答案:

答案 0 :(得分:0)

使用完整域模型通过控制器传递数据是一种非常糟糕的做法。您可以创建自定义Dto,然后使用automapper将数据从域模型绑定到dto。在dto中,您可以删除&#39; partial&#39;和&#39;虚拟&#39;关键字,并排除nesessary对象属性。