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

.NET接口返回Blog对象时JSON转义异常,需修正为单斜杠

问题说明

单独返回blog.en_content或控制台打印时,输出的JSON格式正常:

{"blocks":[{"key":"51q6n","text":"The purpose of this website is multi-fold:","type":"unstyled","

但返回整个Blog对象时,en_content字段出现三重转义斜杠,结果变成:

{\"blocks\":[{\"key\":\"51q6n\",\"text\":\"The purpose of 
问题根源

en_content本身是JSON格式的字符串,当ASP.NET Core序列化整个Blog对象时,会把字符串里的双引号再次转义——原本的"被转成\",最终在返回的JSON里就呈现为三重转义的\\"。

解决办法

这里给三个实用方案:

方案1:改成强类型实体

如果en_content的JSON结构固定,先定义对应实体类:

// 对应blocks里的结构
public class ContentBlock
{
    [JsonPropertyName("key")]
    public string Key { get; set; }
    [JsonPropertyName("text")]
    public string Text { get; set; }
    [JsonPropertyName("type")]
    public string Type { get; set; }
    // 其他字段根据实际JSON结构补充
}

// 修改Blog实体类
public class Blog
{
    [JsonPropertyName("id")]
    public required string id { get; set; }

    [JsonPropertyName("en_content")]
    public required List<ContentBlock> en_content { get; set; }

    [JsonPropertyName("cn_content")]
    public required List<ContentBlock> cn_content { get; set; }
}

之后查询数据时,把存储的JSON字符串反序列化为List<ContentBlock>类型,返回整个对象时就不会出现多余转义了。

方案2:用JsonRawValue特性

不想改实体类型的话,给en_content和cn_content加上[JsonRawValue]特性,告诉序列化器直接输出原始字符串,不做转义:

public class Blog
{
    [JsonPropertyName("id")]
    public required string id { get; set; }

    [JsonPropertyName("en_content")]
    [JsonRawValue]
    public required string en_content { get; set; }

    [JsonPropertyName("cn_content")]
    [JsonRawValue]
    public required string cn_content { get; set; }
}

注意:必须保证en_content是有效的JSON字符串,否则返回的JSON会格式错误。

方案3:手动处理后返回

如果不想改实体,也可以在接口里临时处理:

using System.Text.Json.Nodes;

[HttpGet("blog/{blog_id}")]
[AllowAnonymous]
public async Task<IActionResult> get_blog(string blog_id)
{
    var blog = await _blogs.Find(b => b.id == blog_id).FirstOrDefaultAsync();
    if (blog == null) return NotFound("Blog not found.");
    
    var result = new {
        id = blog.id,
        en_content = JsonNode.Parse(blog.en_content),
        cn_content = JsonNode.Parse(blog.cn_content)
    };
    return Ok(result);
}

把字符串转成JsonNode后再返回,序列化时会自动处理成正常的JSON结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:03:15