积极答复者
WCF JSON序列化循环引用问题

问题
-
var readList = ( from c in browTB join d in bookTB on c.boodId equals d.bookId select new { borwTime = c.borwTime.ToString("yyy-MM-dd"), bookInfo =d} ).ToList(); string result = jss.Serialize(readList);
以上是我WCF调用entityframework edmx实体集查询的结果,我采用JSON序列化对这个查询的匿名类进行序列化,返回给silverlight端,但是当这个匿名类中包含子对象时,报循环引用错误。
但当去除类包含类时。则可以序列化成功。请问类包含类这种关系,怎样进行JSON序列化,并返回到Silverlight端
答案
-
如果你用TFSoft本人精心研制的T4Data系列你就不再会为系列化传输数据烦恼。
T4Data的T4DataSet及T4DataTable支持自动系列化和反系列化(支持。net所有基础数据类型的系列化,用ToBsStr、FromBsStr语句搞定这个DataTable/DataSet的系列化或反系列化,并智能处理NULL值)。实际上系列化我个人认为国人翻译的不太准确,翻译为持久化更为贴切。
并且不需要在服务器端事先手动编写或自动创建任何代码或实体,就能在Silverlight端以类似ado.net的方式直接方便高效动态访问Web端数据库。测试表明,当网络速度较快时,甚至比源ado.net装载DataTable的速度还要快。(因为T4DataTable远远没有.net的DataTable复杂,是一个精简版的.net DataTable)。T4Data传输大量数据时(万以上记录,20个以上字段),比WCF RIA快很多。
本论坛有下载,但提醒你不得用于商业用途。
- 已标记为答案 飞耗子 2011年7月8日 16:11
全部回复
-
如果你用TFSoft本人精心研制的T4Data系列你就不再会为系列化传输数据烦恼。
T4Data的T4DataSet及T4DataTable支持自动系列化和反系列化(支持。net所有基础数据类型的系列化,用ToBsStr、FromBsStr语句搞定这个DataTable/DataSet的系列化或反系列化,并智能处理NULL值)。实际上系列化我个人认为国人翻译的不太准确,翻译为持久化更为贴切。
并且不需要在服务器端事先手动编写或自动创建任何代码或实体,就能在Silverlight端以类似ado.net的方式直接方便高效动态访问Web端数据库。测试表明,当网络速度较快时,甚至比源ado.net装载DataTable的速度还要快。(因为T4DataTable远远没有.net的DataTable复杂,是一个精简版的.net DataTable)。T4Data传输大量数据时(万以上记录,20个以上字段),比WCF RIA快很多。
本论坛有下载,但提醒你不得用于商业用途。
- 已标记为答案 飞耗子 2011年7月8日 16:11
-
您好,您的T4Data无法持久化类中包含对象的List实体 代码:
var readList =
(
from c in browTB
join d in bookTB
on c.boodId equals d.bookId
select new { browTime = c.borwTime.ToString("yyyy-MM-dd"), bookInfo = new { d.bookName,d.price} }
).ToList();
T4DataTable dt = new T4DataTable();
dt.FromEntityList(readList);
string result = dt.ToBsStr();
return result;dt.FromEntityList,转化成T4DataTable只有1个列,browTime,如果 bookInfo = d.bookName 那就有两个列了。