Newtonsoft.Json解析DateTimeOffset值失败的原因及JSON格式排查
问题分析与解决
JSON格式的核心问题
你传入的JSON存在嵌套JSON字符串未正确转义的问题:
{"body":"{ "transactionDate": "2022-02-12T01:22:33+00:00" }"}
这里body的值是一个JSON字符串,但内部的双引号没有用反斜杠转义,导致JSON解析器无法正确识别字段边界。正确的格式应该是:
{"body":"{ \"transactionDate\": \"2022-02-12T01:22:33+00:00\" }"}
序列化错误的原因
你的API方法PostConsumeWalletAsync接收的参数是ConsumeWalletRequest类型,但传入的JSON中body字段的值是字符串形式的JSON,而非直接的对象结构。Newtonsoft.JSON尝试将这个字符串直接反序列化为ConsumeWalletRequest对象时,自然会失败——因为字符串无法匹配ConsumeWalletRequest的对象结构(它需要的是包含transactionDate字段的对象,而非一个字符串)。
修复方案
方案1:修正传入的JSON结构
直接传递对象而非嵌套的JSON字符串,去掉外层body的字符串包裹,让JSON结构与ConsumeWalletRequest模型匹配:
{"transactionDate": "2022-02-12T01:22:33+00:00"}
方案2:调整接收模型(若必须保留外层结构)
如果API要求必须用body字段包裹,可以定义一个外层模型来接收:
public class OuterRequest { [Newtonsoft.Json.JsonProperty("body")] public ConsumeWalletRequest Body { get; set; } }
同时修改API方法的参数为OuterRequest,这样Newtonsoft.JSON就能正确解析外层body字段,并将内部对象反序列化为ConsumeWalletRequest。
内容的提问来源于stack exchange,提问作者Zahra
相关产品推荐
相关产品推荐

