【发布时间】:2017-08-02 06:56:34
【问题描述】:
我已经为此苦苦挣扎了一段时间,我认为是时候寻求帮助了。
我正在使用 RestSharp 连接到我的本地 PHP REST API。我返回api结果的格式如下(JSON):
{
"estado": "login_correcto",
"content": {
"id": 1,
"nombreusuario": "daniaguado",
"contrasena": "qwerty",
"email": "daniel@zadecon.com",
"nivelacceso": 5,
"created_at": "2017-08-01 10:31:16",
"updated_at": "-0001-11-30 00:00:00"
}
}
为此,我创建了一个自定义Usuario 类(用户)和一个自定义ResponseUsuario,如下所示:
class Usuario
{
public int id { get; set; }
public string nombreusuario { get; set; }
public string contrasena { get; set; }
public string email { get; set; }
public int nivelacceso { get; set; }
public string created_at { get; set; }
public string updated_at { get; set; }
}
然后是ResponseUsuario:
class ResponseUsuario
{
public string estado { get; set; }
public Usuario content { get; set; }
}
当响应正常(202)并且用户存在时,响应被解析正常。
但是,当登录不正确时,在“内容”中我返回的是一条消息,而不是用户:
{
"estado": "login_incorrecto",
"content": "La contraseña es incorrecta / Password incorrect"
}
所以,如果我在那里使用ResponseUsuario,queryResult.Data 为空,因为它无法将内容映射到Usuario 类。事实是,如果我不使用 ResponseUsuario 而是使用 Response 类,其中内容变量是类型对象,我无法将其转换为 Usuario 并且我无法处理它。
这是更通用的 Response 类,我知道我应该将其用于所有查询:
class Response
{
public string estado { get; set; }
public object content { get; set; }
}
最后,这是我的 RestSharp 查询:
ApiClient api = new ApiClient(); // Just create the client with some common parameters
var request = new RestRequest("usuarios/login", RestSharp.Method.POST);
request.AddParameter("nombreusuario", textbox_usuario.Text);
request.AddParameter("contrasena", textbox_contrasena.Text);
var queryResult = api.cliente.Execute<ResponseUsuario>(request);
if (queryResult.StatusCode == System.Net.HttpStatusCode.OK)
{
Usuario u = (Usuario) queryResult.Data.content; // Gives error when using Execute<Response> (object content)
String s = queryResult.Data.estado;
Console.Out.WriteLineAsync($"OK - {u.nombreusuario} - {u.email} - Acceso: {u.nivelacceso}");
}
else
{
Console.Out.WriteLineAsync($"Query Failed: {queryResult.StatusDescription}, estado: {queryResult.Data.estado}"); // Giving error when using Execute<ResponseUsuario>
}
如何将演员表固定为 Usuario(或内容的匹配类)?我认为 Response 类应该是我对 API 的所有查询所共有的,然后将 Content 部分转换为它的适当类,但我不知道该怎么做。
【问题讨论】:
标签: c# json wpf rest restsharp