2017-05-22 14 views
2

私が使用しているRest APIにはApi-Keyという新しいフィールドがあります。これは有効なC#フィールド名ではありませんので、身体を構築する別の方法があるのだろうかと思います。RestSharpのオブジェクトからJSONへの問題

var client = new RestClient("https://TestWeb"); 

     var request = new RestRequest("login", Method.POST); 
     request.AddHeader("Content-type", "application/json"); 

     request.AddJsonBody(
      new { 
       credentials = 
      new 
      { 
       username = "Uname", 
       password = "password", 
       Api-Key = "apikey" 
      } }); 
+0

RestSharpはこのアプリケーションで使用するのに素晴らしいライブラリでしたので、私は本当にこれを回避する方法があると期待しています。 – Anthony

答えて

1

RestSharpは、私が知っているため、シリアル化の動作を変更する属性をサポートしていません、私は考え、デフォルトのJSONシリアライザSimpleJsonとして使用しているので:

  1. は順番に、NuGetパッケージNewtonsoft Jsonとしてインストールします。そのJsonProperty属性を使用します。

  2. このような認証オブジェクトを提供するクラスを定義します。

    public class AuthenticationInfos 
    { 
        [JsonProperty(PropertyName = "username")] 
        public string Username { get; set; } 
    
        [JsonProperty(PropertyName = "password")] 
        public string Password { get; set; } 
    
        [JsonProperty(PropertyName = "Api-Key")] 
        public string ApiKey { get; set; } 
    } 
    

(キー部分が無効である、あなたはその名前でそのプロパティをシリアル化するシリアライザを言っている、ここに[JsonProperty(PropertyName = "Api-Key")]です)C#の変数として

  • 使用Newtonsoft JSON本体要求シリアライズするシリアライゼーション:

    var client = new RestClient("https://TestWeb"); 
    
    var request = new RestRequest("login", Method.POST); 
    request.AddHeader("Content-type", "application/json"); 
    
    var body = new 
    { 
        credentials = 
         new AuthenticationInfos() 
         { 
          Username = "Uname", 
          Password = "password", 
          ApiKey = "myApiKey" 
         } 
    }; 
    
    var serializedBody = JsonConvert.SerializeObject(body); 
    request.AddParameter("application/json", serializedBody, ParameterType.RequestBody); 
    
  • 体は次のようになります:メッセージを受信したときに、逆シリアル化の段階で同じにする必要があります。もちろん、

    { 
        "credentials": 
        { 
         "username": "Uname", 
         "password": "password", 
         "Api-Key": "myApiKey" 
        } 
    } 
    

    +1

    完璧に働いて、ありがとう。 – Anthony

    関連する問題