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

Mam problem z odtwarzaniem RestSharp RestRequest.AddBody(obj); serializować obiekt poprawnie.RestSharp RestRequest.AddBody nie używa atrybutów Newton.Json

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

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

problemem jest serializer AddBody nie bierze pod uwagę atrybuty mój JsonProperty i mogę wydawać się, aby dowiedzieć się jak ustawić serializatora na RestRequest lub RestClient?

+0

Czy znalazłeś sposób, aby ustawić to globalnie, a nie na żądanie? – NilsH

+0

To samo podejście zadziała, jeśli zostanie zaimplementowane przeciwko klientowi, a nie indywidualnemu żądaniu, ale w moim przypadku nie chciałem, aby zachowanie przenikało przez wszystkie żądania, tylko poszczególne instancje wymagające jednorazowej projekcji między konfiguracją obiektu repozytorium a wersją interfejsu API obiektu. – tafaju

+1

Którą metodę/właściwość ustawiasz na kliencie, aby to osiągnąć? Wiem, że mogę użyć 'AddHandler' aby dodać domyślny' deserializer', ale nie mogę znaleźć sposobu na dodanie domyślnego 'serializera' – NilsH

Odpowiedz

3

Użyłem odpowiedź z tafaju i wdrożone mój serializatora dla json tak.

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

} 

I działa idealnie dla mnie, odczytuje atrybuty i serializuje wszystkie typy poprawnie. Ale nie testowałem tego ze wszystkimi typami. Dokumentacja mówi, że RootElement, Namespace, DateFormat nie są używane dla json.

5

znalazłem następujący link, który rozwiązał problem braku wsparcia atrybutu RestSharp Deserialization

przesłanianie domyślne serializers

Dokonując wnioski z XML lub organów żądanie JSON, można podać własną implementację ISerializer do posługiwać się.

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; 

i wdrożono następujące klasy aby przesłonić domyślne JsonSerializer New Json Serializer