Saltar al contenido

Serialización RestSharp a JSON, el objeto no está usando SerializeAs attribute como se esperaba

Entiende el código bien antes de usarlo a tu proyecto y si tdeseas aportar algo puedes dejarlo en la sección de comentarios.

Solución:

Esto es para @MaxiWheat y cualquier otra persona interesada en cómo usar JSON.NET como el serializador JSON en una solicitud RestSharp. Básicamente, utilicé el enfoque descrito en esta publicación de blog de Patrick Riley:

// create the request
var request = new RestRequest(yourUrlHere, Method.POST)  RequestFormat = DataFormat.Json ;

// attach the JSON.NET serializer for RestSharp
restRequest.JsonSerializer = new RestSharpJsonNetSerializer();

y el RestSharpJsonNetSerializer es una implementación (menos de 100 líneas de código) de los chicos de JSON.NET (John Sheehan) que se puede encontrar en sus páginas de Github

Con esta configuración, mis problemas desaparecieron y pude tener un DTO adecuado con buenas propiedades de CamelCase, mientras que el JSON serializado las usa en “minúsculas”.

Encontré este problema y lo resolví de una manera ligeramente diferente a la anterior, quería anotarlo aquí.

Tenemos una factory clase que construye todas nuestras solicitudes. Se parece a lo siguiente

public IRestRequest CreatePutRequest(string resource, TBody body)

    var request = new RestRequest(resource)
    
        Method = Method.PUT,
    ;

    request.AddParameter("application/json", Serialize(body), ParameterType.RequestBody);
    return request;

En lugar de usar el AddJsonBody y AddBody métodos contra la solicitud, los cuales causan serialización, utilicé AddParameter que agregará el objeto que pasa sin serialización. Creé un método llamado Serialiseque utiliza JSON.net para serializar nuestra clase.

private object Serialize(T item)

    return JsonConvert.SerializeObject(item);

Esto entonces nos permite usar JSON.net‘s JsonProperty anotación sobre sus propiedades. Aquí hay un ejemplo –

public class Example


    [JsonProperty(PropertyName = "name")]
    public string Name  get; set; 

    [JsonProperty(PropertyName = "created")]
    public DateTime Created  get; set; 

    [JsonProperty(PropertyName = "updated")]
    public DateTime Updated  get; set; 


En RestSharp 104.4, el valor predeterminado JsonSerializer no usa el [SerializeAs] attributecomo se ve al revisar el código fuente.

Una solución a esto es crear un serializador personalizado que use Json.NET JsonSerializer (un buen ejemplo está aquí) y luego decora tus propiedades con el [JsonProperty] attributeal igual que:


Public Property EmailAddress As String

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *