RestSharp无法反序列化含下划线帕斯卡命名属性问题求助
问题解决:RestSharp反序列化时MaterialCompositionFirstChoice始终为null
排查方向与解决方案
1. 匹配序列化器与特性命名空间
RestSharp不同版本默认使用的序列化器不同,必须确保类的特性标记和序列化器对应:
- 若使用Newtonsoft.Json(Json.NET),类文件需添加
using Newtonsoft.Json;,并使用[JsonProperty("xxx")]特性 - 若使用System.Text.Json,类文件需添加
using System.Text.Json.Serialization;,并使用[JsonPropertyName("xxx")]特性
问题大概率出在特性与序列化器不匹配——比如你用了JsonProperty,但RestSharp默认启用的是System.Text.Json序列化器。
2. 强制RestSharp使用Newtonsoft.Json序列化器
如果你的类已经用了JsonProperty特性,需要明确配置RestSharp使用NewtonsoftJsonSerializer:
RestSharp 107+版本写法:
var baseUrl = "some url"; var options = new RestClientOptions(baseUrl) { Serializer = new NewtonsoftJsonSerializer() }; RestClient client = new RestClient(options); var response = await client.ExecuteAsync<List<MaterialCompositionInfo>>(request);
RestSharp 107以下版本写法:
var baseUrl = "some url"; RestClient client = new RestClient(baseUrl); client.AddHandler("application/json", new NewtonsoftJsonSerializer()); var response = await client.ExecuteAsync<List<MaterialCompositionInfo>>(request);
注意:需先安装
RestSharp.Serializers.NewtonsoftJsonNuGet包
3. 手动验证反序列化逻辑
绕过RestSharp直接用Newtonsoft.Json解析响应内容,确认数据本身无问题:
var content = response.Content; var materialList = JsonConvert.DeserializeObject<List<MaterialCompositionInfo>>(content);
如果手动解析后MaterialCompositionFirstChoice能正常取值,说明问题完全由RestSharp序列化器配置错误导致,按步骤2重新配置即可。
4. 最后检查拼写一致性
再次确认:
- JSON字段
MaterialComposition_FirstChoice与特性[JsonProperty("MaterialComposition_FirstChoice")]的字符串完全一致(包括下划线、大小写) - 类属性
MaterialCompositionFirstChoice无拼写错误
内容的提问来源于stack exchange,提问作者hmayed
相关产品推荐
相关产品推荐

