Ado.net Entity Framework实体转换成JSON
2010-11-24 10:06 watsonchia 阅读(867) 评论(2) 编辑 收藏 举报这几天刚开始使用Ado.net Entity Framework,习惯性地使用DataContractJsonSerializer来序列化Entity Framework实体为JSON:
//using System.Runtime.Serialization.Json; public static string ToJson(this object o) { using (MemoryStream ms = new MemoryStream()) { new DataContractJsonSerializer(o.GetType()).WriteObject(ms, o); return Encoding.UTF8.GetString(ms.ToArray()); } }
但是出现了实体[IsRefrence ]=true,不能序列化的错误。我没有把Entity Framework实体此属性修改为false,而是使用JavaScriptSerializer:
//using System.Web.Script.Serialization; public static string ToJson(this object o) { JavaScriptSerializer s = new JavaScriptSerializer(); return s.Serialize(o); }
ok,可以序列化。但是Entity Framework实体带有其他的属性和方法,序列化后的JSON有很多多余的信息,比如:
"EntityState":2,"EntityKey":{"EntitySetName":"StaffInfo","EntityContainerName":"DinnerOrderDbEntities","EntityKeyValues":[{"Key":"Oid","Value":1}],"IsTemporary":false}
我们可以在linq语句里构造新的对象再进行序列化:
var list = from s in dinnerContext.StaffInfo select new { oid = s.Oid, name = s.Name, createdate = s.CreateDate }; return list.ToJson();
这样生成的JSON只有新构造对象里的字段,没有其他多余信息。