PagedList <T>的Newtonsoft.Json序列化不包括一些属性

Leo*_*eoD 3 json json.net pagedlist

我试图将一个PagedList对象(https://github.com/martijnboland/MvcPaging/blob/master/src/MvcPaging/PagedList.cs)序列化为Json,如下所示:

PagedList<Product> pagedList = new PagedList<Product>(products, (page - 1), pageSize);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(pagedList);
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的代码,在结果中我得到一个正确序列化的Product对象数组.但是,以下属性(PagedList)不包含在Json结果中:

    public bool HasNextPage { get; }
    public bool HasPreviousPage { get; }
    public bool IsFirstPage { get; }
    public bool IsLastPage { get; }
    public int ItemEnd { get; }
    public int ItemStart { get; }
    public int PageCount { get; }
    public int PageIndex { get; }
    public int PageNumber { get; }
    public int PageSize { get; }
    public int TotalItemCount { get; }
Run Code Online (Sandbox Code Playgroud)

它们没有被序列化,但它们是PagedList的一部分.

有谁知道为什么?我怎么能在序列化中包含这些属性?

谢谢

Tro*_*roy 9

序列化程序看到PagedList是可枚举的,因此它将它序列化为JavaScript数组.为了使这更容易处理,我GetMetaData()在PagedList对象上公开了一个函数,该函数将返回一个MetaData对象,该对象包含上面提到的字段.这意味着您可以像这样序列化您的页面列表:

string json = Newtonsoft.Json.JsonConvert.SerializeObject(new{
  items = pagedList,
  metaData = pagedList.GetMetaData()
});
Run Code Online (Sandbox Code Playgroud)

这应该导致像这样的JSON对象:

{
    "Items": [
        { ... },
        { ... },
        { ... }
    ],
    "MetaData": {
        "PageSize": 1,
        "PageCount": 2,
        "HasNextPage": true,
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)