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

RestSharp反序列化@开头的JSON键名时字段映射失败如何解决

问题根因

RestSharp v107及以上版本默认使用System.Text.Json作为内置JSON序列化/反序列化实现,而非Newtonsoft.Json(Json.NET)。[JsonProperty]特性属于Newtonsoft.Json的命名空间,默认序列化器无法识别该特性,因此无论特性内传入的键名是什么,都不会触发自定义映射逻辑,最终导致带@前缀的@id字段始终无法完成绑定。

三种尝试写法均不生效的具体原因:

  • 直接定义public string id { get; set; }:属性名与JSON实际键名@id不匹配,默认按名称匹配的规则无法命中
  • 添加[JsonProperty("id")]特性:一是特性本身不被默认序列化器识别,二是传入的键名缺少@前缀,与实际键名不符
  • 添加[JsonProperty("@id")]特性:特性属于Newtonsoft.Json,默认序列化器不识别该标注,映射规则不生效
可用解决方案

二选一即可:

方案1:使用默认序列化器的原生特性(无需额外依赖)

将属性上的特性替换为System.Text.Json原生的[JsonPropertyName]特性,引入对应命名空间即可,无需修改RestClient初始化逻辑。
实体类定义示例:

using System.Text.Json.Serialization;

public class User
{
    [JsonPropertyName("@id")]
    public string ID { get; set; }
    public string url { get; set; }
    public string username { get; set; }
}

方案2:切换RestSharp序列化器为Newtonsoft.Json

如果项目中统一使用Newtonsoft.Json做序列化处理,可以给RestClient配置使用Newtonsoft.Json序列化器,配置完成后[JsonProperty("@id")]标注就可以正常生效。
操作步骤:

  1. 安装NuGet包RestSharp.Serializers.NewtonsoftJson
  2. 初始化RestClient时注入NewtonsoftJson序列化配置,代码示例:
RestClient restClient = new RestClient(
    "https://api.somewebsite.com/pub",
    configureSerialization: cfg => cfg.UseNewtonsoftJson()
);
var request = new RestRequest($"user/Bob");
var actUser = await restClient.GetAsync<User>(request);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:45:32