Сериализация класса в xml с использованием RestSharp.AddBody завершается ошибкой - PullRequest
1 голос
/ 16 февраля 2012

Я пытаюсь добавить простой тестовый класс к 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?
Спасибо за вашу помощь!

1 Ответ

1 голос
/ 17 февраля 2012

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

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

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

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

...