【发布时间】:2021-05-24 20:07:25
【问题描述】:
我正在尝试在 C# 中读取一个 JSON 字符串(实际上它要长得多,但只是为了显示结构......)这是我收到的字符串。
42["cti-agentes","{
\"6139\":{
\"id_agents_interface\":\"453\",
\"agent\":\"6139\",
\"interface\":\"contact1\",
\"logintime\":\"2019-11-26 15:08:46\",
\"pausetime\":\"2019-12-31 13:28:36\",
\"paused\":\"si\",
\"id_pausa\":null,
\"invalid\":\"no\",
\"invalidtime\":null,
\"fullcontact\":\"contact1\",
\"textoterminal\":\"contact1\"
},
\"6197\":{
\"id_agents_interface\":\"5743\",
\"agent\":\"6197\",
\"interface\":\"contact1\",
\"logintime\":\"2020-01-16 10:16:17\",
\"pausetime\":null,
\"paused\":\"no\",
\"id_pausa\":null,
\"invalid\":\"no\",
\"invalidtime\":null,
\"fullcontact\":\"contact2\",
\"textoterminal\":\"contact2\"
}
}"]
字符串应该是一个“代理”数组。 6139 是一个代理,具有所有属性,而 6197 是另一个代理。在这个例子中只有两个代理,但在真实的字符串中有很多。
我对 JSON 格式不是很熟悉,但我试图在这个 web https://jsonformatter.curiousconcept.com/ 中验证它,但我无法让它工作,所以也许我必须在解析它之前稍微“清理”一下字符串?希望你能帮忙。
应用程序应该能够读取 JSON 字符串并将其解析为 .NET 对象,我尝试了 JsonConvert.DeserializeObject() 和 JArray.Parse() 函数,但它们都不适合我。
有什么帮助吗?
【问题讨论】:
-
开头的“42”不应该在那里。此外,您还需要在将双引号放入验证器之前删除分隔双引号的反斜杠(我假设您是从调试视图中复制的,其中 VS 显示带有双引号分隔的字符串)
-
这看起来像是一个转义字符串,可能是从调试器中获取的?请提供实际字符串。例如。在 Visual Studio 中使用选项
Text Visualizer。 -
@AsierAzkolain 开头的
42肯定会使这个 json 无效,所以你可能想要修剪它。你确定这是你收到的 100% 的字符串吗?如果您查看了 Visual Studio 调试器中的字符串,它可能是附加反斜杠的调试器。但是这个 json 存在多个问题......例如 cti-agents 的值被 "" 包围,这实际上使它成为一个字符串而不是一个 json 对象。 -
如果这确实是您收到的内容,那么它是一个严重损坏的 JSON 响应,应该在 SERVER 端进行修复。您应该努力不接受它作为有效数据(因为它不是)并让另一方修复它。如果需要,请升级。
-
@AsierAzkolain 最好的办法是打电话给制造这种垃圾的“开发人员”,然后对他大喊大叫,直到他修复它。如果 42 只是为了模因,我不会感到惊讶 ;-)