c# - JSON_QUERY 和 C# 的 JSON 格式问题

标签 c# sql-server servicestack json-query

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

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

如果我尝试使用 JSON_QUERY 查询该表,我会收到格式错误的错误。所以对于例如

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

返回

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

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

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

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

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

现在我在使用此数据的 View 中使用(和需要使用)的任何类型的 JSON_QUERY sql 再次失败。

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

谢谢!

最佳答案

ServiceStack 的 Servicestack.Text JSON Serializer始终根据有效 JSON 的要求对属性进行双引号。

如果你说的是 OrmLite's blobs for complex types这是使用 ServiceStack 的 JSV Format 序列化的默认情况下,SQL Server 使用 CSV 格式存储键和值,它只在需要时使用双引号。

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

SqlServerDialect.Provider.StringSerializer = new JsonStringSerializer();

关于c# - JSON_QUERY 和 C# 的 JSON 格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55924119/

相关文章:

servicestack - ormlite GetLastInsertId 给出指定的转换无效。错误

c# - Redis Pub/Sub ServiceStack,取消线程

c# - c#中的多态向下转换?

c# - TimeSpan.MinValue 的使用示例?为什么有人会在实践中使用它?

c# - DataGridViewComboBoxColumn 不会在第一次单击时打开下拉列表

sql-server - 如何在 SQL Server Management Studio 中抑制解决方案 1 保存提示

sql-server - 检查 SQL Server SSL 服务器身份验证证书何时过期

C# using 带有返回值的语句或内联声明的结果变量

sql-server - 如何从 SQL Server 导出到 XML

c# - JsonServiceClient 似乎未包含在程序集中