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

如何在Xamarin Forms应用中通过REST服务获取JSON指定字段值

嘿,我来帮你搞定Xamarin Forms里提取JSON指定值的事儿!针对你拿到的REST返回JSON,我给你分享几种实用的方法,都是日常开发里常用的:

方法一:强类型反序列化(推荐,类型安全)

这种方式最稳妥,先把JSON结构映射成C#类,再反序列化取值,不容易出错。

1. 用Newtonsoft.Json(Json.NET)

这是很多Xamarin开发者的首选库,成熟好用:

  • 先给项目安装NuGet包:右键项目 → 管理NuGet包 → 搜索Newtonsoft.Json安装
  • 创建对应JSON结构的模型类:
public class ApiResponse
{
    public bool Success { get; set; }
    public List<string> ErrorMessages { get; set; }
    public ResponseData Data { get; set; }
}

public class ResponseData
{
    public string text { get; set; } // 和JSON键名保持一致,或者用JsonProperty特性映射
    public int value { get; set; }
}
  • 反序列化并提取值:
// 假设response是你请求返回的HttpResponseMessage
var jsonString = await response.Content.ReadAsStringAsync();
var apiResponse = JsonConvert.DeserializeObject<ApiResponse>(jsonString);

// 拿到你要的指定值
string targetText = apiResponse.Data.text; // 结果是"Yes"
int targetValue = apiResponse.Data.value; // 结果是100

2. 用System.Text.Json(.NET 5+自带)

如果你的Xamarin项目基于较新的.NET版本,直接用系统自带的库就行,不用额外装包:

  • 模型类可以加特性映射大小写(如果你的属性名和JSON键名大小写不一致的话):
public class ResponseData
{
    [JsonPropertyName("text")]
    public string Text { get; set; }
    [JsonPropertyName("value")]
    public int Value { get; set; }
}
  • 反序列化取值:
var jsonString = await response.Content.ReadAsStringAsync();
var apiResponse = JsonSerializer.Deserialize<ApiResponse>(jsonString);

string targetText = apiResponse.Data.Text;
int targetValue = apiResponse.Data.Value;

应急方案:动态反序列化(临时用用可以)

要是不想写模型类,临时应急的话可以用动态方式,但不推荐长期用——因为没有类型检查,JSON结构一变就容易报错:

  • Newtonsoft.Json动态写法:
var jsonString = await response.Content.ReadAsStringAsync();
dynamic dynamicResp = JsonConvert.DeserializeObject(jsonString);

string targetText = dynamicResp.Data.text;
int targetValue = dynamicResp.Data.value;
  • System.Text.Json动态写法:
var jsonString = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(jsonString);
var root = doc.RootElement;

string targetText = root.GetProperty("Data").GetProperty("text").GetString();
int targetValue = root.GetProperty("Data").GetProperty("value").GetInt32();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:10