Вопрос по json – Newtonsoft.Json сериализация PagedList <T> не включает некоторые свойства

3

Я пытаюсь сериализовать объект 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);

Если я использую приведенный выше код, в результате я получаю массив объектов 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; }

Они не сериализуются, но являются частью PagedList.

Кто-нибудь знает почему? И как я могу включить эти свойства в сериализации?

Спасибо

Ваш Ответ

3   ответа
0

https: //github.com/turhancoskun/pagify.mv

<script type="text/javascript">
$(function() {
    $('#users').pagify({
        dataUrl: '/User/UserLis',
        callBack: function(){
           // Ajax remove preloader and some other callbacks  
        },
        beforeSend: function(){
           // Ajax show preloader and some other function before start
        }
    });
}
</script>

айл @ readme.md содержит пример

0

просто используйте реализацию Трои. Но для десериализации создайте 2 новых класса:

public class PaginationEntity<TEntity> where TEntity : class 
{
    public PaginationEntity()
    {
        Items = new List<TEntity>();
    }
    public IEnumerable<TEntity> Items { get; set; }
    public PaginationMetaData MetaData { get; set; }
}

public class PaginationMetaData
{
    public int Count { get; set; }
    public int FirstItemOnPage { get; set; }
    public bool HasNextPage { get; set; }
    public bool HasPreviousPage { get; set; }
    public bool IsFirstPage { get; set; }
    public bool IsLastPage { get; set; }
    public int LastItemOnPage { get; set; }
    public int PageCount { get; set; }
    public int PageNumber { get; set; }
    public int PageSize { get; set; }
    public int TotalItemCount { get; set; }
}

и десериализовать таким образом:

PaginationEntity<TEntity> listPaginated = JsonConvert.DeserializeObject<PaginationEntity<TEntity>>(json)

и ты в порядке.

9

что PagedList перечислим, поэтому он сериализует его в массив JavaScript. Чтобы с этим было легче иметь дело, я выставляюGetMetaData()ункция @ объекта PagedList, которая будет возвращать объект MetaData, содержащий именно те поля, которые вы упомянули выше. Это означает, что вы можете сериализовать свой список страниц следующим образом:

string json = Newtonsoft.Json.JsonConvert.SerializeObject(new{
  items = pagedList,
  metaData = pagedList.GetMetaData()
});

Это должно привести к объекту JSON следующим образом:

{
    "Items": [
        { ... },
        { ... },
        { ... }
    ],
    "MetaData": {
        "PageSize": 1,
        "PageCount": 2,
        "HasNextPage": true,
        ...
    }
}
любая идея, как десериализовать AMH
Спасибо Трой, очень хорошая реализация. Я просто добавляю часть десериализации, как попросил AMH. PedroSouki

Похожие вопросы