0

ここに電話をかけたい場合: http://thegamesdb.net/api/GetGamesList.php?name=x-men

次の 2 つのクラスがあり、現在XMLDocument、応答を解析するために使用しています。

        public class Data
        {
           private IEnumerable<Game> Game { get; set; } 
        }

        public class Game
        {
            public int id { get; set; }
            public string GameTitle { get; set; }
            public DateTime ReleaseDate { get; set; }
            public string Platform { get; set; }
        }

ASP.NET Web API を使用して呼び出しを行い、モデルに自動バインドすることで合理化できるのでしょうか? それとも、これはからデータを送信する場合にのみ機能しApiControllerますか?

4

1 に答える 1

1

もちろん、Microsoft.AspNet.WebApi.Client パッケージをインストールするだけです - http://nuget.org/packages/Microsoft.AspNet.WebApi.Client/4.0.20710.0

これで、外部サービスを呼び出して、オブジェクトを直接読み取ることができます:

var client = new HttpClient();
var response = await client.GetAsync("http://thegamesdb.net/api/GetGamesList.php?name=x-men");
if (response.IsSuccessStatusCode)
{
    var data = await response.Content.ReadAsAsync<Data>();
    foreach (var game in data.Game)
    {
        Console.WriteLine("{0}\t{1};\t{2}", game.Id, game.GameTitle, game.Platform);
    }
}

編集:

XML のコレクションの形式が標準ではない場合、次のようにします。

[XmlRoot("Data")]
public class Data
{
    [XmlElement("Game")]
    public List<Game> Games { get; set; }
}

[XmlType("Game")]
public class Game
{
    public int id { get; set; }
    public string GameTitle { get; set; }
    public string ReleaseDate { get; set; }
    public string Platform { get; set; }
}

と:

    var client = new HttpClient();
    var response = await client.GetAsync("http://thegamesdb.net/api/GetGamesList.php?name=x-men");
    if (response.IsSuccessStatusCode)
    {
        var games = await response.Content.ReadAsAsync<Data>(new HashSet<MediaTypeFormatter>() { new XmlMediaTypeFormatter {UseXmlSerializer = true} });
        foreach (var game in games.Games)
        {
            Console.WriteLine("{0}\t{1};\t{2}", game.id, game.GameTitle, game.Platform);
        }
    }

XmlSerializerプロパティの形式で実際に送信される配列をどのように扱うかをヒントする必要があります。また、それらの日付は有効ではないため、文字列に保存する (またはセッターで解析する) 必要があります。

また、XmlSerializernotを使用しているため、DataContractSerializerは使用できません。IEnumerableである必要がありますList<T>

于 2013-02-03T03:06:19.423 に答える