2013-03-12 44 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 2013-03-26 19:52:54

+0

如果針對客戶端而不是單個請求實施相同的方法,但在我的情況下,我不希望行爲遍歷所有請求,只需要在存儲庫對象配置和API版本之間進行一次性投影的特定實例的對象。 – tafaju 2013-03-29 15:49:49

+1

您在客戶端上設置了哪種方法/屬性以實現該目的?我知道我可以使用'AddHandler'來添加一個默認的'deserializer',但我找不到如何添加一個默認的'serializer' – NilsH 2013-03-29 15:52:19

回答

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

我發現下面的鏈接,解決了缺少的屬性支持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