c# - 使用 JSON 文本阅读器反序列化时出现 JSON 错误消息
问题描述
尝试从流中读取 JSON 时出现此错误:
Newtonsoft.Json.JsonSerializationException: '读取 DataTable 时出现意外的 JSON 令牌。预期 StartArray,得到字符串。路径“Data.GUID”,第 1 行,位置 110。
错误在线syncResult = serializer.Deserialize<cls_Sync.SyncResult>(json)
cls_Sync.SyncResult syncResult = new cls_Sync.SyncResult();
using (var stream = await response.Content.ReadAsStreamAsync())
{
using (var reader = new StreamReader(stream))
{
//reader.ReadToEnd();
using (var json = new JsonTextReader(reader))
{
syncResult = serializer.Deserialize<cls_Sync.SyncResult>(json);
}
}
}
这是类的结构:
public class SyncResult
{
public Guid GUID;
public bool IsSuccessful;
public string Message;
public string SQL;
public DataSet Data;
public List<Guid> SyncResultGUIDs;
public Guid LastSyncGUID;
public SyncResult();
}
示例 JSON:
{
"ContentEncoding": null,
"ContentType": "Application/json",
"Data": {
"GUID": "00000000-0000-0000-0000-000000000000",
"IsSuccessful": true,
"Message": null,
"SQL": null,
"Data": {
"Table": []
},
"SyncResultGUIDs": [],
"LastSyncGUID": "00000000-0000-0000-0000-000000000000"
},
"JsonRequestBehavior": 0,
"MaxJsonLength": null,
"RecursionLimit": null
}
解决方案
问题是你缺少一个外部类。您正在尝试反序列化为 a SyncResult
,但该对象实际上在 JSON 中更下一层。
尝试定义以下包装类:
public class ResultWrapper
{
public string ContentEncoding { get; set; }
public string ContentType { get; set; }
public SyncResult Data { get; set; }
public long JsonRequestBehavior { get; set; }
public int? MaxJsonLength { get; set; }
public int? RecursionLimit { get; set; }
}
然后反序列化到包装器中并从中获取SyncResult
:
syncResult = serializer.Deserialize<ResultWrapper>(json).Data;
小提琴:https ://dotnetfiddle.net/0uY9Yo
注意:您可以省略包装器中实际上不需要的任何属性。如果您只需要 ,SyncResult
那么包装器可以像这样简单:
public class ResultWrapper
{
public SyncResult Data { get; set; }
}
推荐阅读
- angular - 在解析中调用 router.navigate() 函数的原因
- php - SQLSTATE[HY000] [2002] Lampp Ubuntu 中没有这样的文件或目录
- regex - 正则表达式匹配开头、结尾和包含字符串
- docker - 在 ha 神器集群前配置 haproxy 负载均衡器
- python - 如果在列文本字符串中找到值,如何使用字典键添加新的数据框列
- html - 单击切换器时,引导导航元素被按下
- flutter - Flutter Carouse Pro 缩放
- javascript - 使用 Vimeo API 重命名视频
- python - 从自举标准误差计算的 T 统计量
- reactjs - React 和 ag-grid - 如何更新 `getRowClass` 函数?