我正在尝试反序列化一个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实用程序指示“plaintext”字符串是有效的JSON https://jsonformatter.curiousconcept.com/#
在StackOverflow和其他地方还有很多关于相同异常的问题,但在这些情况下,问题是他们没有输入有效的JSON,因为他们有多个根元素。在我的例子中,我没有多个根元素,所以我希望能够在没有任何额外输入的情况下解析这个对象(即:提供模式对象)。
我是不是漏掉了什么?在我看来,Newtonsoft库拒绝了有效的JSON。
2条答案
按热度按时间v09wglhw1#
创建一个阶级,并使其成为一个废弃物
p5fdfcr12#
正如评论者所建议的那样,这是因为字符串中JSON后面有额外的不可打印字节。这是因为我通过解密一些加密文本获得了JSON字符串。
C#的基本.Trim()和.Trim('\0')不起作用,因为字符串中有多个\0字节,中间还有其他垃圾。
我使用这一行来分割null-char:
从这里的答案复制:Help with \0 terminated strings in C#
来自user 123456的建议可能有效(我没有尝试),但我主要感兴趣的是找出为什么我最初的方法不起作用,而不是找到一个变通方案。