2013-03-12 4 views
8
var obj = new MyObject(); 

У меня возникли проблемы с получением RestSharp RestRequest.AddBody(obj); для правильной сериализации объекта.RestSharp RestRequest.AddBody не используя Newton.Json атрибуты

class MyObject 
{ 
    [JsonProperty(PropertyName="a")] 
    public A{get;set;} 

    [JsonProperty(PropertyName="b")] 
    public B{get;set;} 
} 

проблема является AddBody сериализатору не принимая во внимание атрибуты мой JsonProperty и я могу показаться, чтобы выяснить, как установить сериалайзер на RestRequest или RestClient?

+0

Вы нашли способ установить это глобально, а не по запросу? – NilsH

+0

Тот же подход будет работать, если он будет реализован в отношении клиента, а не отдельного запроса, но в моем случае я не хотел, чтобы поведение каскадировалось по всем запросам, а всего лишь отдельные экземпляры, которые требовали одноразовой проекции между конфигурацией объекта репозитория и версией API объекта. – tafaju

+1

Какой метод/свойство вы устанавливаете на клиенте для достижения этого? Я знаю, что я могу использовать 'AddHandler', чтобы добавить десериализатор по умолчанию, но я не могу узнать, как добавить по умолчанию' serializer' – NilsH

ответ

3

Я использовал ответ tafaju и реализовать свой сериалайзер для JSON, как это.

public class CustomJsonSerializer : ISerializer 
{ 
    public CustomJsonSerializer() 
    { 
     ContentType = "application/json"; 
    } 

    public string Serialize(object obj) 
    { 
     return JsonConvert.SerializeObject(obj); 
    } 

    public string RootElement { get; set; } 

    public string Namespace { get; set; } 

    public string DateFormat { get; set; } 

    public string ContentType { get; set; } 

} 

И он отлично работает для меня, он читает атрибуты и правильно сериализует все типы. Но я не тестировал его со всеми типами. В документации говорится, что RootElement, пространство имен, DateFormat не используются для json.

5

я нашел следующую ссылку, которая разрешила проблему отсутствия поддержки атрибута RestSharp Deserialization

Переопределению сериализаторов

по умолчанию При выполнении запросов с XML или органами запроса JSON, вы можете указать свою собственную реализацию ISerializer в использовать.

var request = new RestRequest(); 
request.RequestFormat = RequestFormat.Xml; 
request.XmlSerializer = new SuperXmlSerializer(); // implements ISerializer 
request.AddBody(person); // object serialized to XML using your custom serializer; 

и реализован следующий класс, чтобы переопределить значение по умолчанию JsonSerializer New Json Serializer