Pregunta

Intento agregar una clase de prueba simple a un RestSharp-RestRequest mediante el RestRequest.AddBody-Método. Traté de serializar el uso de los dos serializadores entregados, pero no pude hacer que uno de ellos funcionara (JSON-Serializations funciona bastante bien con la misma configuración ...)

Así es como hago la serialización:

private void SerializationTest()
{
    RestRequest request = new RestRequest();

    request.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer();
    //request.XmlSerializer = new RestSharp.Serializers.XmlSerializer();

    request.RequestFormat = DataFormat.Xml;
    //request.RequestFormat = DataFormat.Json;
    request.AddBody(new Dummy()); // uses JsonSerializer

    label1.Text = request.Parameters[0].Value.ToString();
}

La clase ficticia que estoy usando es:

private class Dummy
{
    public string A = "Some string";
    public string B = "Some string";
}
  1. Usando RestSharp.Serializers.XmlSerializer() Yo obtengo: "<Dummy />"(Falta de ambas cuerdas)

  2. Usando RestSharp.Serializers.DotNetXmlSerializer() No tengo nada, la programación no superó el paso de serialización.

  3. Usando JSON request.RequestFormat = DataFormat.Json;, todo funciona bien.

.

{  
    "A": "Some string",  
    "B": "Some string"  
}

¿Cómo obtengo la clase para serializar adecuadamente a XML?
¡Gracias por tu ayuda!

¿Fue útil?

Solución

Esos son campos, no propiedades. El XMLSerializer subyacente solo busca propiedades públicas. Actualizarlo en esto y debería funcionar:

class Dummy
{
    public string A { get; set; };
    public string B { get; set; };

    public Dummy() {
        A = "Some string";
        B = "Some string";
    }
}

La razón por la que el JSON One funciona es porque defiende el serializador predeterminado de JSON.NET que (aparentemente) admite los campos. Creo que esta es la decisión de diseño incorrecta personalmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top