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

Ho riscontrato un problema con RestSharp RestRequest.AddBody(obj); serializzare correttamente l'oggetto.RestSharp RestRequest.AddBody che non utilizza gli attributi Newton.Json

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

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

problema è il serializzatore ADDBODY non sta prendendo in considerazione gli attributi mia JsonProperty e io riesco a capire come impostare il serializzatore sul RestRequest o RestClient?

+0

Hai trovato un modo per impostarlo a livello globale e non per richiesta? – NilsH

+0

Lo stesso approccio funzionerà se implementato rispetto al client piuttosto che alla singola richiesta, ma nel mio caso non volevo che il comportamento si sovrapponesse a tutte le richieste, ma solo a particolari istanze che richiedevano una proiezione una tantum tra la configurazione dell'oggetto repository e la versione dell'API dell'oggetto. – tafaju

+1

Quale metodo/proprietà si imposta sul client per ottenere ciò? So che posso usare 'AddHandler' per aggiungere un deserializzatore' predefinito, ma non riesco a scoprire come aggiungere un 'serializzatore 'predefinito. – NilsH

risposta

3

ho usato una risposta di tafaju e realizzato il mio serializzatore per JSON come questo.

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

} 

E funziona perfettamente per me, legge gli attributi e serializza correttamente tutti i tipi. Ma non l'ho provato con tutti i tipi. La documentazione dice che RootElement, Namespace, DateFormat non sono usati per json.

5

ho trovato seguente collegamento, che ha risolto il problema di una mancanza di sostegno attributo RestSharp Deserialization

override i serializzatori predefinite

Quando si effettuano le richieste con XML o corpi richiesta JSON, è possibile specificare una propria implementazione di ISerializer a uso.

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; 

e implementato la seguente classe di ignorare l'impostazione predefinita JsonSerializer New Json Serializer

Problemi correlati