【问题标题】:Quick way to return a list of custom objects from a page method w/o a separate BLL从没有单独 BLL 的页面方法返回自定义对象列表的快速方法
【发布时间】:2009-02-26 20:20:05
【问题描述】:

我正在使用 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&lt;object&gt; - 是否比返回说List&lt;SomeDomainObject> 更糟糕?表现?还有什么?

这是 .NET 2.0,我不能使用 3.5 的功能。至少匿名类型有效...

【问题讨论】:

    标签: c# json .net-2.0 subsonic


    【解决方案1】:

    最大的建议可能是将其设置为“集合”而不是列表,但是对于简单的 Web 服务返回,这没什么大不了的,因为该建议最常见于对象仍然存在的环境中在 .NET 程序集中。

    我认为它也很容易阅读。

    【讨论】:

      【解决方案2】:

      在这种情况下使用List&lt;object&gt; 而不是List&lt;SomeDomainObject&gt; 的唯一缺点是在直接从.net 代码调用GetFiles 方法时会丢失强类型访问。

      【讨论】:

      • 谢谢。我不需要在 .NET 的任何地方使用该方法,它的唯一目的是将一些数据返回给客户端,因此看起来 List 会很好。
      【解决方案3】:

      看起来我的方法没有问题。我要做的就是将一个 JSON 对象返回给调用客户端(浏览器)以更新 UI。这个应用程序执行 99% 的读取操作,所以我很好。我实际上开始添加一个服务和域(我将我的业务实体保留在这里)层,但我将把它们扔掉。我真的尽量让这个应用程序保持简单,不要添加我不需要的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多