JSON JSON_QUERY 和 C# 的格式问题

JSON format issues with JSON_QUERY and C#

我在用户 table 中有一个 JSON blob 列(例如群组),其中包含一个 json 对象,如下所示:

{Security:[1,5],Reporting:[2,8]}

如果我尝试使用 JSON_QUERY 查询 table,我会收到格式错误的错误消息。所以例如

SELECT JSON_QUERY([Groups],'$.Security') from User

Returns

JSON text is not properly formatted. Unexpected character 'S' is found at position 1.

原因是 SQL 服务器中的 JSON blob 似乎坚持在对象属性上使用双引号。所以如果上面的 JSON 看起来像这样(注意双引号)那么一切都很好。

{"Security":[1,5],"Reporting":[2,8]}

问题是我在 C# 应用程序中使用 ServiceStack,它会根据预定义的用户 poco 自动构建此 JSON blob 并直接插入到数据库通过 API。当它按照 POCO 上的预定义插入此 JSON blob 时,它会自动将其插入 而无需双引号。...就像这样。

{Security:[1,5],Reporting:[2,8]}

现在,我在使用此数据的视图中使用(并且需要使用)的任何类型的 JSON_QUERY sql 再次失败。

任何人都可以在这里建议一种方法来处理这个问题或澄清为什么会发生这种情况。 JSON 数据在 C# 代码和 SQL 服务器之间的表示方式似乎不一致,这导致它不兼容。

谢谢!

ServiceStack 的 Servicestack.Text JSON Serializer 始终根据有效 JSON.

所需的双引号属性

如果您谈论 OrmLite's blobs for complex types that's serialized using ServiceStack's JSV Format 默认情况下 SQL 服务器使用 CSV 格式存储键和值,它只在需要时使用双引号。

OrmLite 的文档展示了如何 configure the Complex Type Serializer 每个 RDBMS 方言,例如您可以配置 SQL 服务器使用 JSON 序列化复杂类型:

SqlServerDialect.Provider.StringSerializer = new JsonStringSerializer();