Ado.net Entity Framework实体转换成JSON
2010-11-24 10:06 watsonchia 阅读(894) 评论(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只有新构造对象里的字段,没有其他多余信息。
浙公网安备 33010602011771号