尝试通过WebApi get返回列表时,我收到了SerializationException。
Full error message on pastebin
这是我的代码:
HomeController.cs:
public IEnumerable<Article> Get() {
return repo.GetArticles();
}
Repository.cs:
public List<Article> GetArticles() {
using (var db = new ArticlesContext()) {
return db.Articles.ToList();
}
}
ArticlesContext.cs:
public class Article {
[Key]
public int ArticleID { get; set; }
public string Title { get; set; }
public int UserID { get; set; }
[ForeignKey("UserID")]
public virtual User Author { get; set; }
}
public class User {
[Key]
public int UserID { get; set; }
[ForeignKey("ArticleID")]
public virtual List<Article> Articles { get; set; }
}
public class ArticlesContext : DbContext {
public DbSet<Article> Articles { get; set; }
public DbSet<User> Users { get; set; }
public ArticlesContext() : base("name=conn") {
//etc
}
}
答案 0 :(得分:0)
如何返回List而不是IEnumerable
<cfif success>
<cfset result ='{"sent":"yes"}'>
<cfelse>
<cfset result ='{"sent":"no"}'>
</cfif>
答案 1 :(得分:0)
根据错误消息,似乎序列化代理类时出现问题。您可以尝试关闭代理生成。
有时阻止实体框架的创建很有用 代理实例。例如,序列化非代理实例是 比序列化代理实例容易得多。代理创建 可以通过清除ProxyCreationEnabled标志来关闭。一个地方 你可以这样做是在你的上下文的构造函数。例如:
public class BloggingContext : DbContext
{
public BloggingContext()
{
this.Configuration.ProxyCreationEnabled = false;
}
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
答案 2 :(得分:0)
使用AsEnumerable()
代替ToList()
public IEnumerable<Article> GetArticles() {
using (var db = new ArticlesContext()) {
return db.Articles.AsEnumerable();
}
}