我正在尝试反序列化一个 JSON 对象。字符串 'plaintext' 的值为:
{"expiryDay":1,"expiryMonth":6,"expiryYear":2023,"machineGuid":"a3586fb9-b05e-46f1-a4a0-683a97109e34","name":"Alexander Farley"}
这一行抛出异常:
var json = JObject.Parse(plaintext);
例外情况是:
Newtonsoft.Json.JsonReaderException: 'Additional text encountered after finished reading JSON content: . Path '', line 1, position 129.'
这让我感到惊讶,因为我相信输入是有效的 JSON。此 Web 实用程序表明“纯文本”字符串是有效的 JSON https://jsonformatter.curiousconcept.com/#
StackOverflow 和其他地方还有许多其他问题询问相同的异常,但在那些情况下,问题是他们没有输入有效的 JSON,因为它们有多个根元素。在我的例子中,我没有多个根元素,所以我希望能够在没有任何额外输入(即提供模式对象)的情况下解析这个对象。
有什么我想念的吗?在我看来,Newtonsoft 库拒绝有效的 JSON。
创建一个类并反序列化它
var outObject = JsonConvert.DeserializeObject<yourclass>(response);
return outObject;
正如评论者所建议的,其原因是字符串中 JSON 后面有额外的不可打印字节。发生这种情况是因为我通过解密一些加密文本得到了 JSON 字符串。
C# 的基本 .Trim() 和 .Trim(' ') 不起作用,因为字符串中有多个字节,中间还有其他垃圾。
我用这一行来分割空字符:
s = s.Split(new[] { '\0' }, 2)[0];
从此处的答案复制: 帮助处理 C# 中终止的字符串
user123456 的建议可能有效(我没有尝试),但我主要想找出为什么我原来的方法不起作用,而不是找到解决方法。