0

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

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

4

3 回答 3

1

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

我认为它也很容易阅读。

于 2009-02-26T20:25:09.203 回答
1

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

于 2009-02-26T20:27:52.240 回答
0

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

于 2009-02-27T06:14:48.460 回答