Xamarin Forms中Refit调用API遇System.Text.Json反序列化异常
问题原因
API返回的JSON是包含单个User对象的数组(用[]包裹),但你的Refit接口GetData2方法声明返回单个User对象,类型不匹配导致反序列化失败。
解决方案
1. 修改Refit接口的返回类型
将Task<User>改为Task<List<User>>或Task<User[]>,适配数组格式:
namespace Glow.Interface { public interface IAuthAPI { [Post("/subscribers/login")] Task<string> SignIn([Body] Dictionary<string, string> data); [Post("/subscribers")] Task<string> Register([Body] Dictionary<string, string> data); // 修改返回类型为List<User> [Get("/subscribers/{gmail}")] Task<List<User>> GetData2([AliasAs("gmail")] string gmail); } }
2. 调整调用代码
因为返回的是用户列表,需要从列表中获取目标用户:
var userList = await todoServer.GetData2(gmail); var todoItem = userList.FirstOrDefault(); // 若确定仅返回一个用户,可使用First()
额外说明
- 你的
User模型属性名与JSON字段完全匹配(包括_id、__v),这部分无需修改。 - 如果后端API设计是根据gmail返回单个用户,也可以要求后端调整返回格式为单个对象(去掉外层
[]),这样就不需要修改前端接口定义。
内容的提问来源于stack exchange,提问作者akrem abdulkadir
相关产品推荐
相关产品推荐

