【发布时间】:2017-02-27 08:09:05
【问题描述】:
我有以下用例,我想使用 JSON.net (Newtonsoft.Json) 序列化/反序列化 T 的 IPagedList。这似乎不起作用。它不会序列化所有内容,仅序列化项目(或使用我自己的 ContractResolver,具有空属性的对象)。我正在使用 X.PagedList nuget。
一个测试用例:
var list = new List<int>(Enumerable.Range(1, 1000));
var paged = list.AsQueryable().ToPagedList(3, 10);
var json = JsonConvert.SerializeObject(paged); (output: [21,22,23,24,25,26,27,28,29,30])
var obj = JsonConvert.DeserializeObject<PagedList<int>>(json);
当我扩展 DefaultContractResolver 并覆盖 CreateContract 方法时,它会反序列化为 IPagedList 对象,但没有填充任何属性,也没有任何项目。我试图覆盖 CreateProperties,但没有按预期工作。
protected override JsonContract CreateContract(Type objectType)
{
if (typeof(IPagedList).IsAssignableFrom(objectType))
{
return CreateObjectContract(objectType);
}
return base.CreateContract(objectType);
}
那么我怎样才能成功地序列化/反序列化这个类呢?
【问题讨论】:
-
您是否通过调试确认
paged包含数据? -
是的,它包含了我期望的所有数据,IsLastPage、PageSize、HasNextPage 等都设置好了。
-
PagedList github repo 好像不再维护了。最好按照我在下面的建议使用内置函数,这样发生意外行为的可能性较小。
-
我正在使用 x.PagedList,它是 PagedList 的一个分支,似乎得到了维护。但我想使用这个 nuget 的原因是它可以轻松快速地创建网格页面。
标签: c# json serialization json.net