似乎无法使用WCF的本机DataContractJsonSerializer或ASP.NET的本机JavaScript序列化器将Entity Framework对象序列化为JSON。这是由于两个串行器都拒绝的引用计数问题。我还尝试了Json.NET,它在引用计数问题上也特别失败。
编辑: Json.NET现在可以序列化和反序列化Entity Framework实体。
我的对象是Entity Framework对象,它们被重载以执行其他业务功能(例如,身份验证等),并且我不想使用特定于平台的属性来修饰这些类,因为我想提供一个与平台无关的API 。
我实际上已经在https://blog.programx.co.uk/2009/03/18/wcf-json-serialization-woes- and-a-solution/上写了我经过的各个步骤的博客。
我错过了明显的事情吗?
我这样做的方法是将要序列化的数据投影到匿名类型中,然后对其进行序列化。这样可以确保仅将我真正想要的JSON信息序列化,并且不会在对象图的后面无意间对某些信息进行序列化。看起来像这样:
var records = from entity in context.Entities select new { Prop1 = entity.Prop1, Prop2 = entity.Prop2, ChildProp = entity.Child.Prop } return Json(records);
我发现匿名类型对此非常理想。显然,JSON并不关心使用哪种类型来生成它。匿名类型使您可以完全灵活地输入JSON中的属性和结构。