如何使用额外的" " 反序列化 json 字符串



我有输入 Json 字符串,我正在尝试反序列化

{
"ID":1,
"Details":{
"Product":""Boston,saline"",
"cost":150.0
} 
}

{
"ID":1,
"Details":{
"Product":"Boston "Sample"",
"cost":150.0
} 
}

当我尝试使用$JsonConvert.DeserializeObject<JObject>(input)时,它会给我错误说"After parsing a value an unexpected character was encountered"这是意料之中的。有没有办法反序列化这种字符串?

谢谢!

您能否使用本机String方法中的.replace将所有双双引号替换为单个双引号。

你不能。

假设用户能够创建一个名为", "x": "y的产品。这将表示为(错误地序列化为)

"Details": {
"Product": "", "x": "y",
"cost": 150.0
}

这是有效的 JSON,因此没有语法方法来检测任何错误。

更糟糕的是,如果攻击者创建了一个名为", "cost": 1.0, "x": "y的产品怎么办。这将表示为(应用了一些格式)

"Details": {
"Product": "",
"cost": 1.0,
"x": "y",
"cost": 150.0
}

您的反序列化器将如何处理?它会接受吗?(有些人会。它是使用第一个"cost"还是第二个"cost",也就是说,它是否允许攻击者降低成本?攻击者是否有可能在真实"cost"之后创建重复?即使反序列化该字符串时当前一切正常,升级到新版本的库后它是否会继续工作?

截至 2017 年,Json.net 接受此类 JSON 并使用第二个重复值(请参阅 Json.net 在重复的情况下不再抛出)。但是此行为在版本 6 和 8 之间发生了变化。它会再次改变吗?

唯一真正的解决方法是修复生成此 JSON 的任何内容。

示例中的内容不是 JSON; 这就是为什么您在使用 JSON 解析器解析它时遇到问题的原因。

考虑修复数据的存储方式或读取方式。

选项 1:修复其存储方式。
它看起来像字符串值"blammy"实际上存储在您的数据库中,如下所示:"blammy". 这是零百分比的正确。 存储在数据库列中的值应blammy(注意,没有引号)。 修复该问题。

选项 2:修复读取方式
某些内容正在从数据库中读取列值。 更改该内容以从字符串数据中删除外部双引号。 然后 (不正确的)存储值"blammy"将是 读取(并修复)要blammy. 这仅适用于您问题中的示例 1。 如果要获得示例 2,则需要执行其他操作。

相关内容

  • 没有找到相关文章

最新更新