2012-12-08 37 views
1

在網絡API項目時,我輸入網址本地主機:端口號]/API/OS,我收到包含錯誤的長XML文件,這裏是異常消息:ASP.Net網頁API序列化異常

類型「系統.Data.Entity.DynamicProxies.CollegeCourse_C7F37B1980970AF17607E96F17DFE50E3A680141BF8228EEA7D39A9150498388' 數據合同名稱‘CollegeCourse_C7F37B1980970AF17607E96F17DFE50E3A680141BF8228EEA7D39A9150498388:HTTP://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies預計不會’。考慮使用DataContractResolver或將任何不知道的類型靜態添加到已知類型的列表中 - 例如,使用KnownTypeAttribute屬性或將它們添加到傳遞給DataContractSerializer的已知類型的列表中。

但是,當我輸入網址本地主機:[端口號]/API /角色一切都很好,這裏是代碼:

OS:

public class UserOS 
{ 
    [Key] 
    [HiddenInput(DisplayValue = false)] 
    public int UserOSId { get; set; } 

    public Guid UserId { get; set; } 

    public string OSType { get; set; } 

    [ForeignKey("UserId")] 
    public virtual User User { get; set; } 
} 

角色:

public class UserRole 
{ 
    [Key] 
    [HiddenInput(DisplayValue = false)] 
    public int RoleId { get; set; } 

    public string Name { get; set; } 

    public ICollection<User> Users { get; set; } 

} 

而角色和操作系統的API控制器是相似的,所以我只會粘貼角色:

private CompeteDataBase _competeDataBase = new CompeteDataBase(); 

    public IEnumerable<UserRole> GetAllRoles() 
    { 
     return _competeDataBase.UserRoles.AsEnumerable(); 
    } 

編輯

是否使用DTO的正確方法?

回答

0

不知怎的,我設法解決問題,我不知道如何或爲何但是刪除再次解決一切數據庫和裝箱(我沒有改變什麼其他)

有沒有人可能知道爲什麼?

5

這是因爲EntityFramework會爲您的班級創建一個「代理」。

要做到這一點,只需禁用代理創建。你可以進入你的上下文構造並添加以下內容:

ContextOptions.ProxyCreationEnabled = false; 
+1

我已經將這兩行添加到了我的DbContext構造函數中 this.Configuration.ProxyCreationEnabled = false; this.Configuration.LazyLoadingEnabled = false; 但是我得到相同的錯誤 – hyperN

+0

你可以檢查你的調試器,看看要返回的對象,並確保對象代理不是創建 – Jack

+0

這不是,我以某種方式刪除數據庫並創建它再次:/ – hyperN