c# - 如何序列化 ASP.NET Core 中的封闭对象属性?
问题描述
我正在关注 Microsoft 的官方ASP.NET Core 2.2 分页示例。
在这里,我添加一个PaginatedList.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace BlatantlyCopiedCode
{
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.AddRange(items);
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex < TotalPages);
}
}
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
}
}
并将其添加到我的 EF 对象Merge
[HttpGet("[action]")]
public async Task<PaginatedList<Merge>> Index(int? pageNumber)
{
var merges = context.Merges;
int pageSize = 20;
return await PaginatedList<Merge>.CreateAsync(merges.AsNoTracking(), pageNumber ?? 1, pageSize);
}
当结果在控制器中序列化为 JSON 时,来自的属性不会PaginatedList<T>
被序列化,只有List<Merge>
. 如何强制属性 fromPaginatedList<T>
出现在生成的 JSON 中?
解决方案
原因是它继承了List<T>
将结果限制为列表的。将您的代码修改为以下
public class PaginatedList<T> //: List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public List<T> Items { get; set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.Items = new List<T>();
this.Items.AddRange(items);
}
//...
}
推荐阅读
- python-3.x - 教师力量培训 PyTorch
- swiftui - SwiftUI 文本字段和整数
- react-native - React Native Video 海报在 ios 中不起作用
- amazon-web-services - 如何使用 AWS CLI 仅根据它们的年龄来获取所有访问密钥
- java - for 循环中的 IndexOf 只删除一个字符
- java - 如果我先调用scanner.hasNext,然后再调用scanner.next,我会扫描两次吗
- julia - 如何将函数标记为`@deprecate`d?
- django - 在 django rest 框架中上传临时文件
- r - 如何在 ggplot 条形图中重新排序 X 轴聚类
- javascript - 使用javascript设置文本输入字段的最小所需长度?