RestSharpを使用してREST Webサービスを使用しています。 RestSharpの内部に統合された自動シリアライゼーション/デシリアライゼーションで使用するための独自のレスポンスオブジェクトクラスを実装しました。RestSharpがJSONを正しくデシリアライズしない
また、正しく動作する列挙型のマッピングを追加しました。 Response.Contentは、私が何を期待含まれていますが、デシリアライズプロセスが正しく動作しませんので
このクラスの問題は、私が正しい要求を送信するとき、私は戻って正しい応答を得るということです。
Response.Content
{
"resultCode": "SUCCESS",
"hub.sessionId": "95864537-4a92-4fb7-8f6e-7880ce655d86"
}
ResultCode
プロパティはResultCode.SUCCESS
列挙値にマッピングされた正しいですが、HubSessionId
プロパティは常にnull
それが直列化復元されていないようなので、それはそうです。
私が見る唯一の問題は、JSON PropertyNameに '。名前に。問題になることはありますか?これはNewtonsoft.Jsonではない新しいJSONシリアライザに関連していますか?どうすれば解決できますか?
UPDATE
私は、JSONの属性がcompletly無視され、これも[JsonConverter(typeof(StringEnumConverter))]
されていることがわかりました。したがって、私は、列挙型マッピングは、属性なしでデフォルトのシリアライザによって自動的に実行されると考えています。 "hub.sessionId"プロパティの問題は依然として残ります。
これは
public class LoginResponse
{
[JsonProperty(PropertyName = "resultCode")]
[JsonConverter(typeof(StringEnumConverter))]
public ResultCode ResultCode { get; set; }
[JsonProperty(PropertyName = "hub.sessionId")]
public string HubSessionId { get; set; }
}
public enum ResultCode
{
SUCCESS,
FAILURE
}
// Executes the request and deserialize the JSON to the corresponding
// Response object type.
private T Execute<T>(RestRequest request) where T : new()
{
RestClient client = new RestClient(BaseUrl);
request.RequestFormat = DataFormat.Json;
IRestResponse<T> response = client.Execute<T>(request);
if (response.ErrorException != null)
{
const string message = "Error!";
throw new ApplicationException(message, response.ErrorException);
}
return response.Data;
}
public LoginResponse Login()
{
RestRequest request = new RestRequest(Method.POST);
request.Resource = "login";
request.AddParameter("username", Username, ParameterType.GetOrPost);
request.AddParameter("password", Password, ParameterType.GetOrPost);
LoginResponse response = Execute<LoginResponse>(request);
HubSessionId = response.HubSessionId; // Always null!
return response;
}
'。' newtonsoft jsonではプロパティ名の問題が一度も発生していません。古いバージョンと最新の両方のバージョンがJSONサンプルとうまく動作するので、これを言うことができます。フィドルを参照してください。 https://dotnetfiddle.net/i0zmc0 v3.5.xを使用しています。 8.xでも試してみることができます。 – niksofteng
私のコードについてもう少し詳しく説明します。 –
'JsonProperty'はJson.NET属性です。シリアライザがJson.NETでない場合、JsonProperty属性は無視されます。 * new *シリアライザの同等の属性は何ですか? –