从页面方法返回自定义对象列表的快速方法,无需单独的 BLL
我正在使用 jQuery 从页面方法检索 JSON 对象。 我有一个使用 SubSonic 的 DAL,如果我返回从 SubSonic 生成的类创建的对象,我会堵塞管道。 :) 你知道,所有公共属性都会被序列化。 我不希望这个应用程序有一个单独的业务层,因为它很小并且专注于读取操作,而另一个层似乎有点矫枉过正。 为了避免下载一些 SubSonic 臃肿的对象(也可能包含敏感信息)并避免构建单独的层,我尝试返回一个对象列表,如下所示:
[WebMethod]
public static List<object> GetFiles()
{
FileCollection collection = DB
.Select()
.From(DataAccess.File.Schema)
.ExecuteAsCollection<FileCollection>();
List<object> files = new List<object>(collection.Count);
foreach (DataAccess.File file in collection)
{
files.Add(new {
file.FileId,
file.ApplicantFirstName,
file.ApplicantLastName,
file.UploadDate
}
);
}
return files;
}
它有效,并且我得到了一个很好的 JSON 对象作为回报(忽略 DateTime 值):
[{"FileId":1,"ApplicantFirstName":"Paweł","ApplicantLastName":"Krakowiak","UploadDate":"\/Date(1235656448387
)\/"}]
这是一个好方法吗? 我担心 List
这是.NET 2.0,我无法使用3.5的功能。 至少匿名类型可以工作......
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最大的建议可能是使其成为“集合”而不是列表,但通过简单的 Web 服务返回,这并不是什么大不了的事情,因为该建议通常是在对象仍然存在于 . NET 程序集。
我认为它也很容易阅读。
The biggest recommendation might be to make it a "Collection" rather than a List, but with a simple webservice return, it isn't as big of a deal, as that recommendation is most typically in environments where the object still lives in a .NET assembly.
I think it is easy to read as well.
在这种情况下,使用
List
The only downside to using
List<object>
instead ofList<SomeDomainObject>
in this scenario would be losing strongly-typed access when calling yourGetFiles
method directly from .net code.看来我的做法并没有什么问题。 我想做的就是向调用客户端(浏览器)返回一个 JSON 对象来更新 UI。 这个应用程序执行 99% 的读取操作,所以我对此很满意。 我实际上开始添加服务和域(我将我的业务实体保留在这里)层,但我将把它们扔掉。 我真的尽力让这个应用程序保持简单,并且不添加我不需要的东西。
Looks like there's nothing wrong with my approach. All that I want to do is to return a JSON object to the calling client (browser) to update the UI. This application does 99% read operations, so I am fine with it. I actually started adding a Services and Domain (I keep my business entities here) layers, but I'm going to throw them away. I really try to keep it simple for this application and don't add stuff I don't need.