Сериализация класса в xml с использованием RestSharp.AddBody не удалась

Я пытаюсь добавить простой тестовый класс в RestSharp-RestRequest с помощью RestRequest.AddBody-метода. Я попытался сериализовать, используя оба предоставленных сериализатора, но не смог заставить работать один из них (JSON-сериализация работает очень хорошо с теми же настройками...)

Вот как я делаю сериализацию:

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();
}

Я использую фиктивный класс:

private class Dummy
{
    public string A = "Some string";
    public string B = "Some string";
}
  1. Используя RestSharp.Serializers.XmlSerializer(), я получаю: "<Dummy />" (отсутствуют обе строки)

  2. Используя RestSharp.Serializers.DotNetXmlSerializer(), я ничего не получаю, программа просто не справляется с этапом сериализации.

  3. При использовании JSON request.RequestFormat = DataFormat.Json; все работает нормально.

.

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

Как сделать так, чтобы класс сериализовался правильно для XML?
Спасибо за помощь!


person DIF    schedule 16.02.2012    source источник


Ответы (1)


Это поля, а не свойства. Базовый XmlSerializer ищет только общедоступные свойства. Обновите его до этого, и он должен работать:

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

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

Причина, по которой работает JSON, заключается в том, что он зависит от сериализатора JSON.NET по умолчанию, который (очевидно) поддерживает поля. Лично я считаю, что это неправильное дизайнерское решение.

person John Sheehan    schedule 16.02.2012