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

Ich habe ein Problem mit RestSharp RestRequest.AddBody(obj); um das Objekt korrekt zu serialisieren.RestSharp RestRequest.AddBody verwendet keine Newton.Json-Attribute

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

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

Problem ist die ADDBODY Serializer Einnahme nicht berücksichtigt meine JsonProperty Attribute und ich kann scheinen, um herauszufinden, wie die Serializer auf der RestRequest oder RestClient gesetzt?

+0

Haben Sie eine Möglichkeit gefunden, dies global und nicht pro Anfrage festzulegen? – NilsH

+0

Derselbe Ansatz funktioniert, wenn er gegen den Client und nicht als einzelne Anforderung implementiert wird, aber in meinem Fall wollte ich nicht, dass das Verhalten alle Anforderungen überlappt, sondern nur bestimmte Instanzen, die eine einmalige Projektion zwischen der Repository-Objektkonfiguration und der API-Version erfordern des Objekts. – tafaju

+1

Welche Methode/Eigenschaft legen Sie auf dem Client fest, um das zu erreichen? Ich weiß, dass ich 'AddHandler' verwenden kann, um einen Standard' deserializer' hinzuzufügen, aber ich kann nicht herausfinden, wie man einen Standard 'serializer' hinzufügt – NilsH

Antwort

3

ich eine Antwort von tafaju verwendet und implementiert für json meiner Serializer wie diese habe außer Kraft zu setzen.

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

} 

Und es funktioniert perfekt für mich, liest es Attribute und serialisiert alle Arten korrekt. Aber ich habe es nicht mit allen Typen getestet. Die Dokumentation besagt, dass RootElement, Namespace, DateFormat nicht für json verwendet werden.

5

fand ich folgenden Link, um das Problem einer fehlenden Attribut Unterstützung RestSharp Deserialization

Aufschalten die Standard-Serializer aufgelöst

Wenn Anfragen mit XML oder JSON Anfrage Körper machen, können Sie Ihre eigene Implementierung von ISerializer angeben benutzen.

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; 

und implementiert die folgende Klasse den Standard JsonSerializer New Json Serializer