C# 在 json 解码后访问对象属性

标签 c# json

在长时间搜索一个好的 JSON 库之后,我找到了 Newtownsoft.json,所以我开始使用它来解码我从网络请求中获得的 json 文本, 我不知道 json 是否被正确解码

类(class):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Request library
using System.Net;
using System.IO;
using Newtonsoft.Json;


namespace TestApplication
{
    class Connect
    {
        public string id;
        public string type;

        private string api = "https://api.stackexchange.com/2.2/";
        private string options = "?order=desc&sort=name&site=stackoverflow";

        public object request()
        {
            string totalUrl = this.join(id);

            string json = this.HttpGet(totalUrl);

            return this.decodeJson(json);
        }

        private string join(string s)
        {
            return api + type + "/" + s + options;
        }

        private string HttpGet(string URI)
        {
            string html = string.Empty;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URI);
            request.AutomaticDecompression = DecompressionMethods.GZip;
            request.ContentType = "application/json; charset=utf-8";

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using (Stream stream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(stream))
            {
                html = reader.ReadToEnd();
            }

            return html;
        }

        private object decodeJson(string json)
        {
            object js = JsonConvert.DeserializeObject(json);

            return js;
        }
    }
}

以这种方式从表单访问类对象:

Connect rq = new 
rq.id = usernameText.Text;
rq.type = "users";
Debug.WriteLine(rq.request());

我不知道为什么我不能做 rq.request().itemsrq.request()["items"],我还是学习 c#,我想知道如何以正确的方式访问 json 对象成员。

注意:这是我正在开发的第一个桌面程序,我是一名 php/nodejs 开发人员,我想制作一个将连接到堆栈交换的应用程序数据库并检索用户的信息。

最佳答案

您的请求方法的返回类型是object,因此返回的实例不会有名为items 的属性。

您需要使用泛型方法并指定正确的类型参数。

尝试将您的 decodeJson 方法更改为:

private T decodeJson<T>(string json)
{
    var js = JsonConvert.DeserializeObject<T>(json);

    return js;
}

然后将您的请求方法更改为:

public T request<T>()
{
    string totalUrl = this.join(id);

    string json = HttpGet(totalUrl);

    return decodeJson<T>(json);
}

现在编写一个类,其属性与从 Web 请求返回的 JSON 中的属性的名称和类型相匹配。

然后将这个新类的类型指定为您调用request 方法的类型参数。

例如,如果您希望 JSON 包含一个名为“Name”的 string 和一个名为“Age<”的 int/strong>',写一个像这样的类:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }
}

然后像这样调用request

Person myPerson = rq.request<Person>();

你会得到一个 Person 的实例,它具有 NameAge 属性

关于C# 在 json 解码后访问对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27112870/

相关文章:

javascript - 我无法在 javascript 中获得正确的 uint32 数字

c# - 静态方法的函数式编程建议如何影响可测试性?

c# - 使用引用继承属性的 lambda 在 Fluent NHibernate 映射中应用过滤器?

javascript - 如何从 JSON 中的数组中选择名称未知的第一个属性和第一项

javascript - 寻找解析帮助

c# - Xamarin 表单 UWP 工具提示

c# - EF4审计多对多关系的变化

java - prb 和我的 json 响应

cJSON键值解析

json - 如何使用 REST 控制台对 http API 调用进行逆向工程