2016-04-05 11 views
1

RestSharpを使用してAPIを消費し、返されたコンテンツをデシリアライズしています。これは私のオブジェクトのプロパティのうちの1つを除くすべてのために正常に動作している:それは私のC#のオブジェクトのnullRestSharpは、1つのプロパティをnullとしてデシリアライズします。

"envId":":AU1:m:w:p:7:^W160216110747138.nev" 

。私は値のコロンがうまくいきませんが、私は確信していません。

私がテストしたところ、プロパティを正常に解析した同じオブジェクトにJSON.NETデシリアライズを実装しました。私はその後、私のC#クラスはうまくいくと仮定していますが、それは失敗しているデシリアライザです。

以下は完全な休憩方法です。

private static T HttpGet<T>(string url) where T : new() 
    { 
     var client = new RestClient(BaseApiUrl); 
     client.Timeout = 1000 * 15;    
     client.ClearHandlers(); 
     client.AddHandler("application/json", new JsonDeserializer()); 

     var request = new RestRequest(url, Method.GET); 
     request.AddHeader("Authorization", "Bearer " + App.Current.Properties["AccessToken"]); 

     // Does not parse EnvID property 
     IRestResponse<T> returnObject = client.Execute<T>(request); 

     // Testing JSON.NET deserialization - does parse EnvID property 
     var content = returnObject.Content; 
     var test = JsonConvert.DeserializeObject<T>(content); 
     // 

     return returnObject.Data; 
    } 

実装は、ここでは以下

string url = //url string here 
StorageObject results = HttpGet<StorageObject>(url); 

である私があまりにもデシリアライズ午前クラス(私は他の人のすべてと全く問題がないよ、プロパティのほとんどを残してきた)

です
public class StorageObject 
{ 
    public StandardAttribute StandardAttributes { get; set; } 

    public List<CustomAttribute> CustomAttributes { get; set; } 


    public StorageObject() {    
     CustomAttributes = new List<CustomAttribute>(); 
    }  

} 

public class StandardAttribute 
{ 
    public string EnvID { get; set; } 
    public string ID { get; set; }  
} 

最後にRest Restを使用して残りの呼び出しを実行しますが、これを回避するためにレスポンスのコンテンツをJSON.NETでデシリアライズすることを検討しています。 RestSharpの最新バージョンをインストールするときにJSON.NETの使用に関する警告が表示されましたが、どのようなリスクがあるのか​​分かりません。

答えて

1

RestSharpがJSON.NETから独自のシリアライザに切り替えたので、よく知られているAPIの応答を正しくデシリアライズできなかったケースが2つ以上見つかりました。独自のシリアライザ/デシリアライザを使用するのは簡単ですが、ISerializerインターフェイスとIDeserializerインターフェイスを実装するだけです。
example implementation using JSON.NETを参照してください。

関連する問題