Vb.net 如何配置类定义以使用Unicode标记的JSON

Vb.net 如何配置类定义以使用Unicode标记的JSON,vb.net,json.net,Vb.net,Json.net,如果我使用regex函数删除u',JSON将正确使用。在Newtonsoft中有没有一种不用正则表达式预处理的方法来处理它 我正在使用VB.net,如果它起作用的话。 以下是一些上下文的片段: { "memo": [ "{u'braums': {u'printing_data': {u'customerFirstName': u'xxxxxx', u'orderNumber': 4495, u'customerLastName': u'xxxxxx',

如果我使用regex函数删除
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的建议,这里有一个例子说明了这个问题。

我用一个子集(
TestClass.showmoorwork()
)和一个子集(
TestClass.showmoorIssue()
)扩展了他的
TestClass
,该子集使用regex删除Unicode标记,然后用一个子集保留Unicode标记(
TestClass.showmoorIssue()


事实上,
JObject
起作用了,这意味着我在语法中缺少了一些东西。

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

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

但是,您从未尝试使用
JObject
执行第二步。您只需反序列化外部JSON,然后将其打印出来,称之为成功。如果您尝试获取其中一个数组项并将其反序列化为
作业对象
,您将看到它以同样的方式失败。下面是一个演示:


简而言之,我认为您必须继续使用regex预处理来处理JSON。更好的做法是首先更改JSON的发射器,使其不包含无效前缀,但我知道这可能不在您的控制范围内。

您的JSON格式不正确-缺少外部大括号。如果我添加了那些Json.NET可以成功反序列化Json的代码,请参阅。你到底有什么问题?是否您正试图将JSON绑定到一个属性名不包含
u'
的模型?或者是您正在解析一个
JObject
,并且您想要u'`?脱光衣服?或者你在什么地方遇到了例外?如果您能将您的问题分享给我们,我们更有可能提供帮助。@dbc该备忘录发布格式不正确的原因,该备忘录只是更大类的一个关键。我只是把它贴出来,但我看到了混乱。我喜欢得到反馈,以便能够提出更清晰的问题。我可能使用反序列化的术语是错误的。我们使用类反序列化,所以我可能跳得太大了。顺便说一句,这个答案可能回答了我关于如何反序列化备忘录的另一个问题。现在,在反序列化它之前,我必须先转到一个字符串。我想直接转到NDOrder\U备忘录,但这将是一个不同的线程。不过,这个例子可以奏效。不幸的是,在这一点上,改变发射器不是一个选项。希望正则表达式解决方案不会在将来引起问题。我想知道为什么像python这样的语言会做一些不标准的事情?我担心我会得到你的答案,现在我可以让我的强迫症继续下去了。:-)谢谢你和dbc的时间。很高兴我能帮忙,但很抱歉这不是你希望的答案。我不是Python专家,但如果我不得不猜测的话,发射器可能使用
str()
而不是
json.dumps()
来创建输出。在Python2.x中,
str()
将创建对象的类似JSON的字符串表示,其中unicode字符串的前缀为
u
。但它实际上不是JSON
json.dumps()
将创建不带
u
前缀的正确json。