一段时间以来,我一直在使用带有 ExtJs 的 netTiers,在编码时确实存在循环引用的问题,但我们很少返回整个实体并发现返回实体数据的子集效果很好。我们使用 C#;这是一个例子:
UserAccountService uaSvc = new UserAccountService();
UserAccount ua = uaSvc.GetByUserId(UserId)[0];
return Json(new { success = true, data = new { ua.UserName, ua.CustomerName, ua.Email } });
其中 UserAccountService 和 UserAccount 是使用 CodeSmith netTiers 模板生成的服务和实体,而 Json() 返回函数是 Microsoft MVC 的一部分。如果您不使用 MVC ,则可以替换另一种编码器,例如Newtonsoft编码器。
这将返回如下所示的 JSON;Ext.js 可以很容易地使用它:
{"success": true, data:{"UserName":"Knight", "CustomerName":"Knight Inc.", "Email":"knight@knightknight.com"}}
也可以返回一个数据列表或者数组,下面使用Linq以非常紧凑的方式实现
return Json(new UserAccountService().GetAll().Select(u=>new {u.UserID, u.UserName}));
这将返回如下数据:
[{"UserName":"Knight", "CustomerName":"Knight Inc.", "Email":"knight@knightknight.com"}, {"UserName":"George", "CustomerName":"George Inc.", "Email":"george@george.com"}]
如您所见,兼容的 JSON 很容易从 netTiers 查询结果中创建。除了 netTiers 之外,我没有使用过其他模板,但我想你会走类似的道路。