C#网络请求与JSON解析的示例代码

下面是详细攻略:

1. C#网络请求

1.1 发送GET请求

1.1.1 示例说明

以获取百度首页HTML为例,这里采用HttpClient发送GET请求:

using System;
using System.Net.Http;

class Program
{
    static async Task Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            var response = await client.GetAsync("https://www.baidu.com");
            var html = await response.Content.ReadAsStringAsync();
            Console.WriteLine(html);
        }
    }
}

代码解释:

首先利用using关键字创建HttpClient实例,通过调用该实例的GetAsync方法发送GET请求并等待响应结果返回。返回的response对象中包含响应头和响应体,这里只取其响应体部分并异步读取为字符串类型的html变量,最后将其打印在控制台上。

1.1.2 注意事项

在实际应用场景中,如果需要设置请求头、请求参数等信息,可利用HttpClient提供的DefaultRequestHeadersUri参数进行配置。

1.2 发送POST请求

1.2.1 示例说明

以向GitHub API发送POST请求为例,假设需要通过用户名和密码获取访问令牌:

using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;

class Program
{
    static async Task Main(string[] args)
    {
        var httpClient = new HttpClient();
        httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
        httpClient.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter");

        var requestJson = new
        {
            note = "my token",
            scopes = new[] {"repo", "user"}
        };

        var requestBody = new StringContent(
            JsonSerializer.Serialize(requestJson), 
            Encoding.UTF8, 
            "application/json");

        var response = await httpClient.PostAsync(
            "https://api.github.com/authorizations", 
            requestBody
        );

        var responseBody = await response.Content.ReadAsStringAsync();

        Console.WriteLine(responseBody);
    }
}

代码解释:

首先实例化HttpClient,并设置请求头信息。构建请求JSON对象,并将其序列化为JSON字符串类型的请求体。然后发送POST请求到GitHub API,等待响应并异步读取响应体内容,最后将其输出到控制台。

1.2.2 注意事项

在实际应用场景中,如果需要设置更多的请求头信息,如Cookie、Authorization、Referer等,可利用HttpClient提供的DefaultRequestHeadersAdd方法进行配置。

2. JSON解析

2.1 Json.NET

Newtonsoft.Json(Json.NET)是一个.NET平台上的高性能JSON框架,它提供简单而又灵活的API,方便实用。下面详细介绍Json.NET的使用。

2.1.1 示例说明

以解析示例JSON字符串为例,假设JSON字符串如下:

{
    "name": "apple",
    "colors": ["red", "green", "yellow"],
    "weight": 75.5,
    "is_on_sale": true,
    "inventory": null,
    "country": "China",
    "description": {
        "zh": "苹果是一种常见的水果",
        "en": "Apple is a common fruit"
    }
}

我们可以通过下列代码解析JSON字符串:

using System;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main(string[] args)
    {
        string jsonString = "{\"name\":\"apple\",\"colors\":[\"red\",\"green\",\"yellow\"],\"weight\":75.5,\"is_on_sale\":true,\"inventory\":null,\"country\":\"China\",\"description\":{\"zh\":\"苹果是一种常见的水果\",\"en\":\"Apple is a common fruit\"}}";
        JObject jobject = JObject.Parse(jsonString);

        string name = jobject["name"].ToString();
        JArray colors = (JArray)jobject["colors"];
        float weight = (float)jobject["weight"];
        bool isOnSale = (bool)jobject["is_on_sale"];
        string country = jobject["country"].ToString();
        JObject description = (JObject)jobject["description"];

        Console.WriteLine($"Name: {name}");
        Console.WriteLine($"Colors: {string.Join(", ", colors)}");
        Console.WriteLine($"Weight: {weight}");
        Console.WriteLine($"IsOnSale: {isOnSale}");
        Console.WriteLine($"Country: {country}");
        Console.WriteLine($"Description:");
        Console.WriteLine($"  `zh`:{description["zh"]}");
        Console.WriteLine($"  `en`:{description["en"]}");
    }
}

代码解释:

首先构造JSON字符串存储在字符串变量中,接着采用Json.NET提供的JObject.Parse方法将JSON字符串转换为JObject对象。然后通过使用[]索引器访问JObject对象中各项属性值,或者通过显式类型转换获取更具体的类型值。

2.1.2 注意事项

在实际应用场景中,如果获取到的JSON数据结构比较复杂,建议使用Json.NET提供的JToken.SelectToken进行路径式的访问,对应的返回类型是JToken对象。

2.2 System.Text.Json

.NET Core 3.0及以上支持自带的JSON处理库System.Text.Json。下面详细介绍System.Text.Json的使用。

2.2.1 示例说明

以解析示例JSON字符串为例,假设JSON字符串如下:

{
    "name": "apple",
    "colors": ["red", "green", "yellow"],
    "weight": 75.5,
    "is_on_sale": true,
    "inventory": null,
    "country": "China",
    "description": {
        "zh": "苹果是一种常见的水果",
        "en": "Apple is a common fruit"
    }
}

我们可以通过下列代码解析JSON字符串:

using System;
using System.Text.Json;

class Program
{
    static void Main(string[] args)
    {
        string jsonString = "{\"name\":\"apple\",\"colors\":[\"red\",\"green\",\"yellow\"],\"weight\":75.5,\"is_on_sale\":true,\"inventory\":null,\"country\":\"China\",\"description\":{\"zh\":\"苹果是一种常见的水果\",\"en\":\"Apple is a common fruit\"}}"; 
        var jsonDoc = JsonDocument.Parse(jsonString);

        string name = jsonDoc.RootElement.GetProperty("name").GetString();
        JsonElement colorsJsonElement = jsonDoc.RootElement.GetProperty("colors");
        float weight = jsonDoc.RootElement.GetProperty("weight").GetSingle();
        bool isOnSale = jsonDoc.RootElement.GetProperty("is_on_sale").GetBoolean();
        string country = jsonDoc.RootElement.GetProperty("country").GetString();
        JsonElement descriptionJsonElement = jsonDoc.RootElement.GetProperty("description");
        JsonElement zhDescriptionJsonElement = descriptionJsonElement.GetProperty("zh");
        JsonElement enDescriptionJsonElement = descriptionJsonElement.GetProperty("en");

        var colors = new List<string>();
        foreach (var color in colorsJsonElement.EnumerateArray())
        {
            colors.Add(color.GetString());
        }

        Console.WriteLine($"Name: {name}");
        Console.WriteLine($"Colors: {string.Join(", ", colors)}");
        Console.WriteLine($"Weight: {weight}");
        Console.WriteLine($"IsOnSale: {isOnSale}");
        Console.WriteLine($"Country: {country}");
        Console.WriteLine($"Description:");
        Console.WriteLine($"  `zh`: {zhDescriptionJsonElement.GetString()}");
        Console.WriteLine($"  `en`: {enDescriptionJsonElement.GetString()}");
    }
}

代码解释:

首先构造JSON字符串存储在字符串变量中,接着采用System.Text.Json提供的JsonDocument.Parse方法将JSON字符串转换为JsonDocument对象。然后通过使用GetProperty方法访问JsonDocument对象中各项属性值,或者使用EnumerateArray方法进行遍历获取数组类型的值。

2.2.2 注意事项

在实际应用场景中,System.Text.Json和Json.NET的使用方式比较类似,但存在一些语法上的不同之处,需要进行注意。此外,System.Text.Json不支持路径式的访问,如需进行复杂JSON结构的操作,则建议使用Json.NET。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#网络请求与JSON解析的示例代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 详解c# 可空类型(Nullable)

    详解C#可空类型(Nullable) 可空类型介绍 C#中引入了可空类型(Nullable Type)的概念,允许值类型(Value Type)中存储null值。在值类型中,如果未给该变量赋值,则该变量的值默认为0,但是如果该变量的值也可以是null,则使用可空类型来定义该变量。 可空类型可用于任何基本类型,如int,float,decimal等。 如何定义…

    C# 2023年6月7日
    00
  • C# 无限级分类的实现

    C# 无限级分类的实现 什么是无限级分类? 无限级分类又称为多级分类,是指一种基于树状结构的数据分类方法。其特点是可以不断的按照需求无限拓展分类层级。 实现无限级分类的步骤 第一步:建立分类表 首先我们需要建立一个分类表,在分类表中应包含以下几个重要字段: 字段 类型 描述 id int 分类编号,主键 name nvarchar 分类名称 parent_i…

    C# 2023年5月31日
    00
  • C# Math.Abs()方法: 返回指定数的绝对值

    C#的Math.Abs()方法说明 作用 Math.Abs()方法是Math类中的一个静态方法,用于计算给定数值的绝对值(即值的大小,不考虑正负)。它是System命名空间下的常用方法之一,常用于数值比较、数形结合题的求解、精度计算等。 使用方法 Math.Abs()方法有多个重载版本,可接受int、long、float、double、decimal等不同类…

    C# 2023年4月19日
    00
  • .Net Winform开发笔记(一)

    我来详细讲解一下“.NetWinform开发笔记(一)”的完整攻略。 前言 本文主要介绍.NetWinform开发的一些基本知识,包括如何创建窗体、添加控件、设置窗体属性等。如果你是初学者,可以通过本文快速入门。同时,为了方便理解,本文配有示例代码。 创建窗体 要创建一个窗体,可以在Visual Studio中选择“新建项目” -> “Windows …

    C# 2023年5月15日
    00
  • C#使用自定义算法对数组进行反转操作的方法

    C#使用自定义算法对数组进行反转操作的方法 反转数组是C#中常见的操作,本文将介绍如何通过自定义算法,在C#中实现对数组的反转操作。 1. 什么是反转? 数组的反转意味着数组中的元素顺序发生改变,从最后一个元素到第一个元素,或者从第一个元素到最后一个元素。比如,原数组 a = {1,2,3,4,5},反转后变成 a = {5,4,3,2,1}。 2. 算法思…

    C# 2023年6月7日
    00
  • C#中感叹号(!) 的作用总结

    当在C#中提及感叹号(!)时,通常指的是逻辑非运算符。这个运算符常用于实现反转布尔值。 逻辑非运算符返回一个布尔值(true或false)。如果操作数为true,则该运算符返回false;如果操作数为false,则该运算符返回true。 在C#中,逻辑非运算符主要有以下两种应用: 运用于空引用类型,表示判定该对象是否为空 在C#中,操作符!被用来判断对象是否…

    C# 2023年6月6日
    00
  • C++联合体转换成C#结构的实现方法

    要将C++联合体转换成C#结构(struct),我们需要遵循以下步骤: 创建一个C#结构来表示C++联合体。这个结构的字段应该对应于联合体的成员变量,且顺序应该相同。例如,假设我们有下面这个C++联合体: union MyUnion { int i; float f; }; 对应的C#结构应该如下所示: [StructLayout(LayoutKind.Ex…

    C# 2023年6月2日
    00
  • asp.net(C#) 生成随机验证码的代码

    生成随机验证码的代码可以使用C#语言的 .NET Framework提供的Random类和StringBuilder类。下面是示例代码: using System; using System.Text; public static class RandomCode { public static string Generate(int length) { c…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部