2013-03-12 6 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'を使ってデフォルトのデシリアライザを追加することができますが、デフォルトのシリアライザを追加する方法がわかりません。 – 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、Namespace、DateFormatはjsonでは使用されていません。

5

私はXMLやJSONのリクエストボディとリクエストを作成する場合、デフォルトのシリアライザは

、あなたがISerializerの独自の実装を指定することができますオーバーライド属性サポートの欠如RestSharp Deserialization

の問題を解決し、以下のリンクを発見しましたつかいます。

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

関連する問題