我在用户表中有一个JSON blob列(例如Groups),其中包含一个json对象,如下所示:
{Security:[1,5],Reporting:[2,8]}
如果我尝试使用JSON_QUERY查询该表,则会收到格式错误的错误。因此,例如
SELECT JSON_QUERY([Groups],'$.Security') from User
返回
JSON文本格式不正确。在位置1处发现意外字符'S'。
原因是因为SQL Server中的JSON Blob似乎坚持在对象属性上使用双引号。因此,如果上述JSON看起来像这样(请注意双引号),那么一切都很好。
{"Security":[1,5],"Reporting":[2,8]}
问题是我在C#应用程序中使用ServiceStack,该C#应用程序根据预定义的用户poco自动构建此JSON blob,并通过API直接插入到数据库中。当它按POCO上的预定义插入此JSON Blob时,它会自动插入不带双引号。。
{Security:[1,5],Reporting:[2,8]}
现在,在消耗该数据的视图中,我正在使用(并且需要使用)的任何JSON_QUERY sql再次失败。
任何人都可以在这里提出一种方法来解决此问题,或者澄清为什么会发生这种情况。在C#代码和SQL Server之间表示JSON数据的方式似乎不一致,这使该数据不兼容。
谢谢!
答案 0 :(得分:3)
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();