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

HTTP Post传递含特殊符号JSON对象时.NET API接收为null的解决方法

含特殊字符(如£、$)的JSON无法正常绑定到.NET API对象的解决方法

问题情况

POST包含£、$等特殊字符的JSON到.NET REST API时,接收的Info对象变为null;移除描述中的£符号后,对象可正常传递。

示例JSON

{
  "InData": {
      "InDescription": "Q2 2023 - Project Chart Inv of GBP 44,500,000 in line",
      "InId": "1085",
      "ImpInformation": {
          "Id": "17",
          "Description": "Acqusition in an off-market transaction for £21.7 MM / £4.34MM to develop logistics warehouse and hold for income.",
          "Name": "Test (Reg)",
          "RegionId": "3"
      }
  },
  "JSONData": {
      "class": "Test"
  }
}

后端对象结构

public class Info
{
    public InData IData { get; set; }
    public JSData JSONData { get; set; }
}

public class InData
{
    public string InDescription { get; set; }
    public string InId { get; set; }
    public ImpData ImpInformation { get; set; }
}

public class ImpData
{
    public string Id { get; set; }
    public string Description { get; set; }
    public string Name { get; set; }
    public string RegionId { get; set; }
}

API Post方法

[HttpPost]
[CustomizedExceptionFilters]
public async Task<HttpResponseMessage> SaveData(Info infoData)
{
    // 业务逻辑
}

解决步骤

1. 确保请求头指定UTF-8编码

客户端发送请求时,必须在Content-Type头中明确指定编码:

Content-Type: application/json; charset=utf-8

若未指定,服务端可能用默认编码(如ASCII)解析,无法识别特殊字符,导致反序列化失败,最终返回null对象。

2. 配置JSON序列化器支持特殊字符

根据你使用的JSON序列化库,调整配置:

若使用Newtonsoft.Json(旧版.NET Framework/.NET Core)

在Startup.cs或Program.cs中配置:

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.StringEscapeHandling = StringEscapeHandling.Default;
        options.SerializerSettings.Encoding = Encoding.UTF8;
    });

若使用System.Text.Json(.NET 5+/.NET Core 3.x+)

在Startup.cs或Program.cs中配置:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
        options.JsonSerializerOptions.Encoding = Encoding.UTF8;
    });

UnsafeRelaxedJsonEscaping允许直接处理非ASCII特殊字符,无需额外转义。

3. 排查自定义异常过滤器

你的API方法使用了[CustomizedExceptionFilters],临时注释该过滤器测试:

  • 若注释后对象能正常接收,说明过滤器吞了反序列化异常,导致返回null。需调整过滤器逻辑,添加对反序列化失败异常的处理,不要让绑定失败时静默返回null。

4. 验证JSON格式合法性

确保提交的JSON格式完全合法(示例中的---------------------是占位符,实际需移除)。非法JSON结构叠加特殊字符会大幅提升反序列化失败概率,可借助本地工具(如VSCode的JSON校验功能)确认格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:15:03