entity转换成json格式的问题

siaosa 2012-01-13 10:36:23
testEntities oc = new testEntities();
var lst = oc.t300km.Where("xxxxx");
现在怎么将lst里的数据转换成json
...全文
629 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
t2rabbit 2012-02-29
  • 打赏
  • 举报
回复
小弟也插插嘴,你的类一定要加public
siaosa 2012-01-15
  • 打赏
  • 举报
回复
estEntities oc = new TestEntities();


var lst = oc.t300kd.Take(10).First();

DataContractJsonSerializer ser = new DataContractJsonSerializer(lst.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, lst); ========>按你那样改了,一样报错
byte[] bs = ms.ToArray();
String s = System.Text.Encoding.UTF8.GetString(bs);
return s;
错误信息
无法将“WebApplication1.t300kd”类型序列化为 JSON,因为它的 IsReference 设置是“True”。JSON 格式不支持引用,因为不存在表示引用的标准化格式。若要启用序列化,请禁用此类型的 IsReference 设置,或禁用此类型的适当父类。
  • 打赏
  • 举报
回复
[Quote=引用楼主 siaosa 的回复:]
testEntities oc = new testEntities();
var lst = oc.t300km.Where("xxxxx");
现在怎么将lst里的数据转换成json
[/Quote]

通用地说,将 lst.ToArray() 转换为json,这就足够了。
机器人 2012-01-15
  • 打赏
  • 举报
回复
得说声sorry了,我试了下的确是这样。EF直接用 DataContractJsonSerializer 可以说无法实现序列化。

原因:
1. Code Generator 生成的实体类有:
[DataContractAttribute(IsReference=true)] 特性
2. 就算把 1 的 IsReference 改为 false 也不行,因为它的父类:EntityObject 标识的也是
IsReference=true
PS:Json.Net 也失败了。

不过,用 WCF REST 或者 WCF DataService 可以序列化,怀疑WCF内部使用了特殊的反序列化器。
解决方法,可以参考:
http://blogs.microsoft.co.il/blogs/idof/archive/2008/09/30/serializing-entity-framework-object-to-json.aspx

或者用 ADO.NET POCO Generator 生成 POCO 的简单实体对象再序列化。
参考:
http://blog.csdn.net/fangxinggood/article/details/6452549

机器人 2012-01-14
  • 打赏
  • 举报
回复
晕啊,前面没仔细看你代码。用错啦


ser.WriteObject(ms, lst.GetType()); ====>这里报错啊

改为

ser.WriteObject(ms, lst); 这里应该传对象嘛
机器人 2012-01-13
  • 打赏
  • 举报
回复
你要是直接用 REST WCF 也不用你自己转,定义 ResponseFormat 为 Json 即可。
如果你用 ASP.NET MVC 也有个 JsonResult 可以直接返回呀。
siaosa 2012-01-13
  • 打赏
  • 举报
回复
不想用第三方的, 可是MS提供的又不好用
siaosa 2012-01-13
  • 打赏
  • 举报
回复
fangxinggood

testEntities oc = new testEntities();

// 这里 Take 返回的是 IQuerable<T> 的 ===>按你说的改了
var lst = oc.t300kd.Take(1).First(); ===>.ToList()同样试过了,报同样的错

DataContractJsonSerializer ser = new DataContractJsonSerializer(lst.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, lst.GetType()); ====>这里报错啊
byte[] bs = ms.ToArray();
String s = System.Text.Encoding.UTF8.GetString(bs);
return s;

无法将“WebApplication1.t300kd”类型序列化为 JSON,因为它的 IsReference 设置是“True”。JSON 格式不支持引用,因为不存在表示引用的标准化格式。若要启用序列化,请禁用此类型的 IsReference 设置,或禁用此类型的适当父类。
机器人 2012-01-13
  • 打赏
  • 举报
回复
用 .net 类库的 DataContractJsonSerializer 或者用 开源的 Json.Net
siaosa 2012-01-13
  • 打赏
  • 举报
回复
System.Web.Script.Serialization.JavaScriptSerializer这个类在转换时报错
序列化类型为“WebApplication9.t300km”的对象时检测到循环引用
如一宝宝 2012-01-13
  • 打赏
  • 举报
回复
System.Web.Script.Serialization.JavaScriptSerializer
看看这个类,可以满足你
机器人 2012-01-13
  • 打赏
  • 举报
回复
我不是贴了么? .First() 要么 .ToList() 一下。看上面红色字
siaosa 2012-01-13
  • 打赏
  • 举报
回复
fangxinggood
是IQueryable<T>,有没有办法将它里边的数据转换成Json啊
机器人 2012-01-13
  • 打赏
  • 举报
回复
testEntities oc = new testEntities();

// 这里 Take 返回的是 IQuerable<T> 的
var lst = oc.t300kd.Take(1).First();


DataContractJsonSerializer ser = new DataContractJsonSerializer(lst.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, lst.GetType()); ==>这里报错
return t;
siaosa 2012-01-13
  • 打赏
  • 举报
回复
Json是哪来的?
大雷神 2012-01-13
  • 打赏
  • 举报
回复
public JsonResult ShowDetail() {
var id = Convert.ToInt32(Request["id"].ToString());
UserInfo u = db.UserInfo.Single(ui=>ui.id==id);
return Json(u,JsonRequestBehavior.AllowGet);

}
这返回的就是
siaosa 2012-01-13
  • 打赏
  • 举报
回复
不是MVC程序

用MS自带的
testEntities oc = new testEntities();
var lst = oc.t300kd.Take(1);
DataContractJsonSerializer ser = new DataContractJsonSerializer(lst.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, lst.GetType()); ==>这里报错
return t;

无法序列化类型“System.Data.Objects.ObjectQuery`1[WebApplication9.t300kd]”。请考虑将其标以 DataContractAttribute 特性,并将其所有要序列化的成员标以 DataMemberAttribute 特性。如果类型为集合,则请考虑将其标以 CollectionDataContractAttribute 特性。有关其他受支持的类型,请参见 Microsoft .NET Framework 文档。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧