c# - WebClient 使用 JSON 并发送其属性值

标签 c# json

我“创建”了一个非常好的在线工具来为我创建一个 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; }
    }
}

最佳答案

首先,请查看此处有关如何执行您想要的操作的完整代码:http://pastebin.com/aQNtjLHs

您获取的 JSON 可以返回超过 1 个玩家。如果你确定它只返回1,你可以这样使用:

Controller :

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 确实返回超过 1 个玩家,您可以这样做:

Controller :

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>
}

关于c# - WebClient 使用 JSON 并发送其属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16298314/

相关文章:

c# - 测试 Entity Framework 数据库连接

c# - 将 ManualResetEvent 包装为等待任务

javascript - 如何防止我的结果在 Mocha Junit 中被覆盖

java - (Java) 使用 Java8 将 JSONObject 的 JSONArray 展平为 [[]]

javascript - 在 JavaScript 中,有没有一个词可以描述一个 JSON 可序列化的对象?

c# - IQueryable<T> 相对于 IList<T> 的优势

c# - 列出对象的所有具体或抽象类

c# - nHibernate 的通用存储库

javascript - 使用 JQuery 从 json 文件中通过键或 id 获取精确值

c++,使用nlohmann::json解析JSON数组