NorthwindContext context = new NorthwindContext();
var data = context.Categories.ToList();
//序列化
DataContractJsonSerializer serializer = new DataContractJsonSerializer(data.GetType());
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, data);
Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray()));
}错误提示:
不应为数据协定名称为“Category_EAAF529CDBD7F8D69F7CB877AF1BEE8D6351196C91B61FD2AB9F27727FFA8FEB:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies”的类型“System.Data.Entity.DynamicProxies.Category_EAAF529CDBD7F8D69F7CB877AF1BEE8D6351196C91B61FD2AB9F27727FFA8FEB”。请考虑使用 DataContractResolver,或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 特性,或者将未知类型添加到传递给 DataContractSerializer 的已知类型列表。
实体数据模型(EDM)加入导航属性序列化失败解决方法
将上下文对象实例Configuration.ProxyCreationEnabled属性值设置为false即可:
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using ConsoleApplication1.Models.Mapping;
namespace ConsoleApplication1.Models
{
public class NorthwindContext : DbContext
{
static NorthwindContext()
{
Database.SetInitializer<NorthwindContext>(null);
}
public NorthwindContext()
: base("Name=NorthwindContext")
{
[color=Red]this.Configuration.ProxyCreationEnabled = false;[/color]
}
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CategoryMap());
modelBuilder.Configurations.Add(new ProductMap());
}
}
}补充说明
[1].设置Configuration.ProxyCreationEnabled = true后,将禁用导航属性,这表示不能通过导航属性访问关联数据。
评论(0)
暂无评论。