33

返されたコンテンツをクラスに逆シリアル化する RestSharp に問題があります。私のすべての検索から、私はこれを正しく行っているようです。Newstonsoft の Json.NET のような別のパッケージにフォールバックするよりも、RestSharp のデシリアライザーを使用したいと思います。

私がやっていることは、予定されているウェビナーのすべてのリストについて、GoToWebinar に API リクエストを行うことです。

var client = new RestClient(string.Format("https://api.citrixonline.com/G2W/rest/organizers/{0}/upcomingWebinars", "300000000000239000"));
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "OAuth oauth_token=" + System.Configuration.ConfigurationManager.AppSettings["GoToWebinar"]);
var response2 = client.Execute<List<RootObject>>(request);

ご覧のとおり、オブジェクト 'RootObject' のリストを取得したいと考えています (以下を参照)。response2.Content で次の JSON 応答を受信して​​います。

[
   {
      "webinarKey":678470607,
      "subject":"Easton's Wild Rice Cooking Demo",
      "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
      "organizerKey":300000000000239551,
      "times":[{"startTime":"2012-05-09T15:00:00Z","endTime":"2012-05-09T16:00:00Z"}],
      "timeZone":"America/Denver"
   },
   {
      "webinarKey":690772063,
      "subject":"Easton's Match Making Service",
      "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
      "organizerKey":300000000000239551,
      "times":[{"startTime":"2012-05-09T15:00:00Z","endTime":"2012-05-09T16:00:00Z"}],
      "timeZone":"America/Denver"
   }
]

上記の JSON の結果を使用して、http://json2csharp.comを使用して次のオブジェクトを作成しました。

public class RootObject
{
    public int webinarKey { get; set; }
    public string subject { get; set; }
    public string description { get; set; }
    public long organizerKey { get; set; }
    public List<Time> times { get; set; }
    public string timeZone { get; set; }
}

public class Time
{
    public string startTime { get; set; }
    public string endTime { get; set; }
}

問題は response2.Data が常に Null です。何らかの理由でデシリアライゼーションが失敗し、その理由がわかりません。私の目標は、 foreach ループを使用して結果を反復処理できるようにすることです。

foreach(RootObject r in response2.Data)
{
    lblGoToWebinar.Text += r.webinarKey.ToString() + ", ";
}

逆シリアル化が失敗する理由についてのアイデアはありますか?

4

3 に答える 3

91

上記の@agarcianの提案に基づいて、エラーをグーグルで検索しました:

restsharp ルート レベルのデータが無効です。行 1、位置 1。

このフォーラムを見つけました: http://groups.google.com/group/restsharp/browse_thread/thread/ff28ddd9cd3dde4b

基本的に、client.Execute が返されるコンテンツ タイプを自動検出できると想定したのは誤りでした。明示的に設定する必要があります。

var request = new RestRequest(Method.GET);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };

これは、RestSharp のドキュメントでより明確に引用できます。うまくいけば、これは他の誰かを助けるでしょう!

于 2012-04-27T16:27:31.487 に答える
3

私はこれと同じ問題を抱えていましたが、上記の回答はどれも役に立ちませんでした。

ここに私の応答クラスがあります:

public class SomeResponse
{
    public string string1;
    public string string2;
}

問題は人的ミスでした。get/set アクセサーを含めるのを忘れていました。私は C# をあまり使用せず、その必要性を忘れていました。

public class SomeResponse
{
    public string string1 { get; set; }
    public string string2 { get; set; }
}

これが誰かを助けることを願っています。

于 2020-11-10T17:26:14.103 に答える