在.NET Core中无需匹配返回JSON所有字段如何基于Web API调用创建模型
解决方案:在.NET中仅提取JSON指定字段反序列化
.NET的主流JSON序列化库默认都支持忽略模型中未定义的额外字段,你只需要定义仅包含所需字段的模型即可,无需匹配JSON的所有参数。
1. 定义目标字段模型
首先创建只包含Name和Nickname两个字段的类:
public class TargetModel { public string Name { get; set; } public string Nickname { get; set; } }
2. 使用内置System.Text.Json反序列化(.NET Core 3.0+ / .NET 5+适用)
该库默认自动忽略JSON中存在但模型未定义的属性,直接调用反序列化方法即可:
using System.Text.Json; // jsonStr为你获取的未知结构JSON字符串 var result = JsonSerializer.Deserialize<TargetModel>(jsonStr); // 可直接读取两个字段的值 Console.WriteLine($"Name:{result.Name},Nickname:{result.Nickname}");
如果需要兼容JSON字段名大小写差异,可添加配置:
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; var result = JsonSerializer.Deserialize<TargetModel>(jsonStr, options);
3. 使用Newtonsoft.Json(Json.NET)反序列化
该库同样默认忽略多余字段,使用方式如下:
using Newtonsoft.Json; var result = JsonConvert.DeserializeObject<TargetModel>(jsonStr);
如需显式配置忽略未定义字段的规则,可添加序列化设置:
var settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }; var result = JsonConvert.DeserializeObject<TargetModel>(jsonStr, settings);
如果你不想定义强类型模型,也可以直接解析JSON节点取值:
- System.Text.Json版本:
var jsonDoc = JsonDocument.Parse(jsonStr); string name = jsonDoc.RootElement.GetProperty("Name").GetString(); string nickname = jsonDoc.RootElement.GetProperty("Nickname").GetString();
- Newtonsoft.Json版本:
var jObj = JObject.Parse(jsonStr); string name = jObj["Name"].ToString(); string nickname = jObj["Nickname"].ToString();
内容的提问来源于stack exchange,提问作者NoctisLupus27
相关产品推荐
相关产品推荐

