You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server关联对象JSON格式异常:C#反序列化失败求助

解决SQL Server FOR JSON嵌套返回转义字符串而非JSON对象的问题

问题场景

你在SQL Server 2019中编写了嵌套FOR JSON的查询,期望返回单个关联的Member对象,但实际输出中Member字段是转义后的JSON字符串,导致ASP.NET Core 8.0反序列化时抛出异常。

原查询语句:

SELECT 
    a.Id, a.Title,
    (SELECT m.Id, m.Name, m.MobileNo
     FROM [msm].[MsmMember] AS m
     WHERE m.Id = a.MemberId 
       AND m.OrganizationId = @OrganizationId
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) AS Member
FROM 
    msm.MsmArticleSubmission a 
WHERE
    a.OrganizationId = @OrganizationId
    AND a.Id = @Id
FOR JSON PATH

错误输出:

[
  {
    "Id": "A4C6B579-5D0C-4807-9537-53C6B1E8E6BA",
    "Title": "Test Data",
    "Member": "{\"Id\":\"79F87A71-332A-43CB-A944-E8C50C00CFF7\",\"Name\":\"Asma Husain Noora\",\"MobileNo\":\"00000000\"}"
  }
]

解决方案

方案1:使用JSON_QUERY包裹子查询结果

SQL Server默认会将字符串类型的JSON内容转义,JSON_QUERY可以明确标记该内容是已格式化的JSON,外层FOR JSON处理时不会再对其转义。

修改后的查询:

SELECT 
    a.Id, a.Title,
    JSON_QUERY(
        (SELECT m.Id, m.Name, m.MobileNo
         FROM [msm].[MsmMember] AS m
         WHERE m.Id = a.MemberId 
           AND m.OrganizationId = @OrganizationId
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
    ) AS Member
FROM 
    msm.MsmArticleSubmission a 
WHERE
    a.OrganizationId = @OrganizationId
    AND a.Id = @Id
FOR JSON PATH

方案2:通过JOIN和字段别名构建嵌套对象

使用JOIN关联表,通过带层级的字段别名(如[Member.Id])让外层FOR JSON自动生成嵌套的JSON对象,无需嵌套FOR JSON子查询。

修改后的查询:

SELECT 
    a.Id, a.Title,
    m.Id AS [Member.Id],
    m.Name AS [Member.Name],
    m.MobileNo AS [Member.MobileNo]
FROM 
    msm.MsmArticleSubmission a
LEFT JOIN [msm].[MsmMember] AS m
    ON m.Id = a.MemberId 
    AND m.OrganizationId = @OrganizationId
WHERE
    a.OrganizationId = @OrganizationId
    AND a.Id = @Id
FOR JSON PATH

正确输出示例

两种方案都会返回如下格式的JSON,Member字段为原生JSON对象,可直接被ASP.NET Core反序列化:

[
  {
    "Id": "A4C6B579-5D0C-4807-9537-53C6B1E8E6BA",
    "Title": "Test Data",
    "Member": {
      "Id": "79F87A71-332A-43CB-A944-E8C50C00CFF7",
      "Name": "Asma Husain Noora",
      "MobileNo": "00000000"
    }
  }
]

内容的提问来源于stack exchange,提问作者Sraban75

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:57:35