Fetch API反序列化对象时整体打印与直接访问值不一致问题
排查方向建议
- 检查对象属性的getter/setter劫持:
- 用
Object.getOwnPropertyDescriptor(data, 'ppqDate')查看属性描述符,确认是否存在自定义get/set方法导致控制台显示异常。也需排查全局对象原型(如Object.prototype)是否被篡改,添加了同名getter影响遍历显示。
- 用
- 验证控制台日志的显示干扰:
- 尝试打印对象的序列化副本
console.log(JSON.parse(JSON.stringify(data))),排除浏览器控制台延迟解析或显示优化导致的视觉异常。
- 尝试打印对象的序列化副本
- 排查API响应的编码与格式问题:
- 对比
result.text()返回字符串的长度与Swagger中JSON的长度,用encodeURIComponent(resultText)检查是否存在BOM或不可见字符。同时确认ASP.NET API的响应头Content-Type是否正确设置为application/json; charset=utf-8。
- 对比
- 定位异步代码的属性修改:
- 在获取
data后立即执行Object.freeze(data),若后续有代码尝试修改属性会抛出错误,借此定位是否有异步操作篡改了字段值。
- 在获取
- 检查ASP.NET API的序列化配置:
- 在API端将返回的JSON字符串写入日志,与Swagger显示结果对比,排查是否存在自定义Json转换器导致的序列化异常。同时用
Object.keys(data)确认实际属性名与预期是否一致。
- 在API端将返回的JSON字符串写入日志,与Swagger显示结果对比,排查是否存在自定义Json转换器导致的序列化异常。同时用
- 测试环境与浏览器的一致性:
- 更换不同浏览器测试,禁用所有浏览器扩展,排除浏览器自身解析bug或扩展劫持Fetch/JSON.parse的可能。
内容的提问来源于stack exchange,提问作者AssistantToTheRegionalManager
相关产品推荐
相关产品推荐

