restclient net example deserialize async application c# json restsharp

c# - net - RestSharp Publicar un objeto JSON



restsharp timeout (5)

Estoy intentando publicar el siguiente JSON con RestSharp:

{"UserName":"UAT1206252627", "SecurityQuestion":{ "Id":"Q03", "Answer":"Business", "Hint":"The answer is Business" }, }

Creo que estoy cerca, pero parece que estoy luchando con SecurityQuestion (la API está arrojando un error que dice que falta un parámetro, pero no dice cuál)

Este es el código que tengo hasta ahora:

var request = new RestRequest("api/register", Method.POST); request.RequestFormat = DataFormat.Json; request.AddParameter("UserName", "UAT1206252627"); SecurityQuestion securityQuestion = new SecurityQuestion("Q03"); request.AddParameter("SecurityQuestion", request.JsonSerializer.Serialize(securityQuestion)); IRestResponse response = client.Execute(request);

Y mi clase de preguntas de seguridad se ve así:

public class SecurityQuestion { public string id {get; set;} public string answer {get; set;} public string hint {get; set;} public SecurityQuestion(string id) { this.id = id; answer = "Business"; hint = "The answer is Business"; } }

¿Alguien puede decirme que estoy haciendo mal? ¿Hay alguna otra manera de publicar el objeto de pregunta de seguridad?

Muchas gracias.


De nuevo, gracias por tu ayuda. Para que esto funcionara, tuve que enviar todo como un único parámetro. Este es el código que usé al final.

Primero hice un par de clases llamadas Solicitar Objeto y Pregunta de Seguridad:

public class SecurityQuestion { public string Id { get; set; } public string Answer { get; set; } public string Hint { get; set; } } public class RequestObject { public string UserName { get; set; } public SecurityQuestion SecurityQuestion { get; set; } }

Luego lo agregué como un solo parámetro y lo serialicé a JSON antes de publicarlo, así:

var yourobject = new RequestObject { UserName = "UAT1206252627", SecurityQuestion = new SecurityQuestion { Id = "Q03", Answer = "Business", Hint = "The answer is Business" }, }; var json = request.JsonSerializer.Serialize(yourobject); request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody); IRestResponse response = client.Execute(request);

Y funcionó !


Debe especificar el tipo de contenido en el encabezado:

request.AddHeader("Content-type", "application/json");

Además, AddParameter agrega a la POST o la cadena de consulta de URL en función del Método

Creo que necesitas agregarlo al cuerpo así:

request.AddJsonBody( new { UserName = "UAT1206252627", SecurityQuestion = securityQuestion }); // AddJsonBody serializes the object automatically


Para publicar cadenas de cuerpo sin formato json, los métodos AddBody () o AddJsonBody () no funcionarán. Use lo siguiente en su lugar

request.AddParameter( "application/json", "{ /"username/": /"johndoe/", /"password/": /"secretpassword/" }", // <- your JSON string ParameterType.RequestBody);


Parece que la forma más fácil de hacer esto es dejar que RestSharp maneje toda la serialización. Solo necesitas especificar el RequestFormat como tal. Esto es lo que se me ocurrió para lo que estoy trabajando. .

public List<YourReturnType> Get(RestRequest request) { var request = new RestRequest { Resource = "YourResource", RequestFormat = DataFormat.Json, Method = Method.POST }; request.AddBody(new YourRequestType()); var response = Execute<List<YourReturnType>>(request); return response.Data; } public T Execute<T>(RestRequest request) where T : new() { var client = new RestClient(_baseUrl); var response = client.Execute<T>(request); return response.Data; }


RestSharp soportado desde el objeto por el método AddObject

request.AddObject(securityQuestion);