2

C# クラスを作成するための非常に優れたオンライン ツール ( http://json2csharp.com/ )を「設立」しましたが、JSON を使用してプロパティにそれぞれの値を入力する WebClient を作成する必要があります。

実際、私はすでに独自の WebClient を作成しようとしましたが、JSON2Csharp から生成されたコードにそれを実装する方法がわかりません。

JSON2CSharp コード:

 public class UserModel 
 {
    public int communityvisibilitystate { get; set; }
    public int profilestate { get; set; }
    public string personaname { get; set; }
    public int lastlogoff { get; set; }
    public string profileurl { get; set; }
    public string avatar { get; set; }
    public string avatarmedium { get; set; }
    public string avatarfull { get; set; }
    public int personastate { get; set; }
}

public class Response
{
    public List<UserModel> users { get; set; }
}

public class RootObject
{
    public Response response { get; set; }
}

今、私は UserModel のクラスでこれをやろうとしました:

public class UserModel
{
    public UserModel()
    {
        WebClient request = new WebClient();
        var response = request.DownloadString(url);

        JsonConvert.PopulateObject(response, this);
    }

    ...
}

しかし、成功しませんでした(予想どおり)。だから私は尋ねます: WebClient を JSON2Csharp のコードと互換性を持たせるにはどうすればよいですか?

前もって感謝します。

====更新====

私の見解:

@model DotaMix.Models.UserModel
@{
   ViewBag.Title = @Model.personaname;
}

問題: タイトルが見えない。

====更新====

私の完全なモデルのコード:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Globalization;
using System.Web;
using System.Web.Security;
using System.Net;
using System.Configuration;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ServiceStack.Text;

namespace Mix.Models
{
    public class UserModel
    {
        public UserModel()
        {
            WebClient request = new WebClient();
            var response = request.DownloadString(url);

            JsonConvert.PopulateObject(response, this);
        }

        public string steamid { get; set; }
        public int communityvisibilitystate { get; set; }
        public int profilestate { get; set; }
        public string personaname { get; set; }
        public int lastlogoff { get; set; }
        public string profileurl { get; set; }
        public string avatar { get; set; }
        public string avatarmedium { get; set; }
        public string avatarfull { get; set; }
        public int personastate { get; set; }
    }

    public class Response
    {
        public List<UserModel> users { get; set; }
    }

    public class RootObject
    {
        public Response response { get; set; }
    }
}
4

2 に答える 2

3

まず、あなたが望むことを行う方法に関する完全なコードについては、こちらをご覧ください: http://pastebin.com/aQNtjLHs

取得している JSON は、複数のプレーヤーを返すことができます。1 しか返さないことが確実な場合は、次のように使用できます。

コントローラ:

public ActionResult Index()
{
    WebClient request = new WebClient();
    var url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?    key=B88B7699C6EACAE138DDB93BED6467EC&steamids=76561198026602449";
    var response = request.DownloadString(url);

    var myObject = new RootObject();

    JsonConvert.PopulateObject(response, myObject);
    //get only the first player     
    return View(myObject.response.players.FirstOrDefault());
}

意見:

@model DotaMix.Models.Player

@Model.personaname

その json が実際に複数のプレーヤーを返す場合、次のようにすることができます。

コントローラ:

public ActionResult Index()
{

    WebClient request = new WebClient();
    var url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=B88B7699C6EACAE138DDB93BED6467EC&steamids=76561198026602449";
    var response = request.DownloadString(url);
    var myObject = new RootObject();
    JsonConvert.PopulateObject(response, myObject);
    return View(myObject.response);
}

意見:

@model DotaMix.Models.Response

@foreach (var player in Model.players)
{
  <li>@player.personaname</li>
}
于 2013-04-30T14:14:20.227 に答える