在網絡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的正確方法?
我已經將這兩行添加到了我的DbContext構造函數中 this.Configuration.ProxyCreationEnabled = false; this.Configuration.LazyLoadingEnabled = false; 但是我得到相同的錯誤 – hyperN
你可以檢查你的調試器,看看要返回的對象,並確保對象代理不是創建 – Jack
這不是,我以某種方式刪除數據庫並創建它再次:/ – hyperN