为什么我从 json.NET 得到“完成读取 JSON 内容后遇到的附加文本”?

问题描述 投票:0回答:2

我正在尝试反序列化一个 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。

json .net exception serialization json.net
2个回答
0
投票

创建一个类并反序列化它

    var outObject = JsonConvert.DeserializeObject<yourclass>(response);
    return outObject;

0
投票

正如评论者所建议的,其原因是字符串中 JSON 后面有额外的不可打印字节。发生这种情况是因为我通过解密一些加密文本得到了 JSON 字符串。

C# 的基本 .Trim() 和 .Trim(' ') 不起作用,因为字符串中有多个字节,中间还有其他垃圾。

我用这一行来分割空字符:

s = s.Split(new[] { '\0' }, 2)[0];

从此处的答案复制: 帮助处理 C# 中终止的字符串

user123456 的建议可能有效(我没有尝试),但我主要想找出为什么我原来的方法不起作用,而不是找到解决方法。

© www.soinside.com 2019 - 2023. All rights reserved.