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
相关产品推荐
相关产品推荐

