DevExtreme LoadResult客户端反序列化报错解决方法
问题根因
报错核心原因是DevExtreme.AspNet.Data.ResponseModel.LoadResult的data属性为非泛型IEnumerable接口类型,Newtonsoft.Json默认无法直接实例化接口,无法确定data字段需要初始化为哪种具体集合类型,因此解析到data路径时抛出类型创建失败错误。
解决方法
优先使用DevExtreme.AspNet.Data官方内置的JSON转换器处理反序列化,无需额外编写自定义转换逻辑,兼容性最高:
- 确保客户端项目已安装和服务端大版本一致的
DevExtreme.AspNet.DataNuGet包 - 反序列化时传入官方提供的
DataSourceLoadResultJsonConverter即可,参考代码如下:
using DevExtreme.AspNet.Data.ResponseModel; using DevExtreme.AspNet.Data.Helpers; using Newtonsoft.Json; // 原有接口请求逻辑无需修改 var apiClient = new HttpClient(); var apiResponse = await apiClient.GetAsync(url); string json = await apiResponse.Content.ReadAsStringAsync(); // 配置序列化器加入官方专用转换器 var serializerSettings = new JsonSerializerSettings { Converters = { new DataSourceLoadResultJsonConverter() } }; LoadResult items = JsonConvert.DeserializeObject<LoadResult>(json, serializerSettings);
补充说明
- 如果客户端定义了和服务端结构完全一致的
FormattedItem类型,可以使用泛型版本LoadResult<FormattedItem>作为反序列化目标类型,解析完成后data字段会直接映射为强类型的FormattedItem集合,无需二次类型转换。 - 不推荐自行编写通用
IEnumerable类型转换器处理该问题,官方转换器已经兼容LoadResult所有字段的序列化规则(包括totalCount、groupCount、summary、groupings等特殊字段),自行实现容易出现字段解析不完整、类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Tomasz Filipek
相关产品推荐
相关产品推荐

