如何配置 class 定义以使用标记为 JSON 的 Unicode

How to configure class definition to consume Unicode marked JSON

如果我使用正则表达式函数删除 u',则会正确使用 JSON。 Newtonsoft 有没有办法在没有正则表达式预处理的情况下处理它?

我正在使用 VB.net 如果它有所作为。 这是一些上下文的片段:

{
  "memo": [
    "{u'braums': {u'printing_data': {u'customerFirstName': u'xxxxxx', u'orderNumber': 4495, u'customerLastName': u'xxxxxx', u'num_refrigerated_labels': 1, u'num_dry_labels': 1, u'packedBy': u'xxxxxxx xxxxxxx', u'pickupTime': u'11/18/2020 15:00', u'num_frozen_labels': 0}}}",
    "{u'braums': {u'cancellation_reasons': {u'who': u'xxxxxxx', u'when': u'11/18/2020 8:02 PM', u'why': u'called to cancel'}}}"
  ]
}

根据@dbc 的建议,这里有一个显示问题的示例。 https://dotnetfiddle.net/pM1qs2

我扩展了他的 TestClass,其中包含一个使用正则表达式删除 Unicode 标记的子项 (TestClass.ShowMemoWork()),然后是一个保留 Unicode 标记的子项 (TestClass.ShowMemoIssue())

JObject 有效的事实,意味着我缺少语法中的某些内容。

据我所知,Json.Net 不支持在 JSON 中的字符串前面使用 u 前缀。这绝对不是 JSON 标准的一部分,如您所见 here\u 可以在 内部 字符串中用作 4 个十六进制数字字符串的前缀以表示 unicode 字符,但这与示例中的内容完全不同。

我认为您是被骗了,以为它与 JObject 一起“有效”,但在那种情况下您并没有真正进行相同的测试。在您的 ShowMemoIssue 示例中,您首先反序列化完整的 JSON (效果很好),然后尝试反序列化 memo 数组中的一个字符串。第二步失败,因为该字符串无效 JSON 由于 u 前缀。

但是你永远不会尝试使用 JObject 的第二步。你只反序列化外层的JSON然后打印出来,就称成功了。如果您尝试获取数组项之一并将其反序列化为 JObject,您将看到它以同样的方式失败。这是一个演示:https://dotnetfiddle.net/W7XQpd

简而言之,我认为您将不得不继续使用正则表达式预处理来处理您的 JSON。更好的办法是更改 JSON 的发射器,使其首先不包含无效前缀,但我知道这可能不受您的控制。