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#开发教程之ftp操作方法整理

    C#开发教程之ftp操作方法整理 1. 什么是FTP FTP是文件传输协议(File Transfer Protocol)的缩写,是用于在Internet上进行文件传输的一套标准协议。它使用客户端-服务端架构,基于TCP协议,支持不同的文件格式和操作系统。 2. 如何在C#中实现FTP操作 在C#中,可以使用FTP类库和WebClient类库来实现FTP的操…

    C# 2023年5月15日
    00
  • C#实现百分比转小数的方法

    C#实现百分比转小数的方法 概述 在实际编码中,常常会遇到需要将百分数转换为小数的情况。本文将介绍C#中实现该功能的方法。 实现方法 方法一 使用数学计算方法将百分数转换为小数。 在C#中,我们可以使用除法将百分数转换为小数,具体方法如下: double percentage = 80.5; // 假设这是80.5% double decimalNumber…

    C# 2023年6月7日
    00
  • C#二维数组基本用法实例

    下面是关于“C#二维数组基本用法实例”的完整攻略。 什么是二维数组 在C#中,数组是一个由相同类型的若干元素在连续的存储空间中所组成的集合。而二维数组则是由多个一维数组组合形成的。可以理解为一个数据表格,有行和列两个维度。 声明二维数组 声明二维数组需要指定行数和列数,并使用两个方括号“[]”来表示。语法如下: int[,] numbers = new in…

    C# 2023年6月7日
    00
  • C#窗体传值实例汇总

    C#窗体传值实例汇总 简介 在C#窗体应用程序中,传递数据是非常常见的需求,本文将对C#窗体传值相关知识进行汇总与讲解,包括如何在不同窗体间传递数据、如何使用委托传递数据、如何使用事件传递数据等。 不同窗体间传递数据 方法一:通过构造函数传值 在窗体A中,对窗口B进行实例化时,通过构造函数传递参数即可。 // 窗体A private void button1…

    C# 2023年6月7日
    00
  • ASP.NET Core应用错误处理之ExceptionHandlerMiddleware中间件呈现“定制化错误页面”

    ASP.NET Core应用错误处理之ExceptionHandlerMiddleware中间件呈现“定制化错误页面” 在ASP.NET Core应用程序中,错误处理是一个非常重要的方面。当应用程序出现错误时,我们需要能够捕获并处理这些错误,以便向用户提供有用的信息。在本攻略中,我们将深入讲解如何使用ExceptionHandlerMiddleware中间件…

    C# 2023年5月17日
    00
  • C#二维数组与多维数组的具体使用

    C#二维数组与多维数组的具体使用 在 C# 语言中,数组是一种重要的数据类型,能够存储多个同类型的元素。二维数组和多维数组具有相似的用法,但有着不同的实现方式和适用场景。 二维数组 二维数组的定义 在 C# 中,定义一个二维数组需要指定它的行数和列数。下面是一个定义了一个 3 行 4 列的整型数组的例子: int[,] myArray = new int[3…

    C# 2023年6月7日
    00
  • 轻松学习C#的装箱与拆箱

    轻松学习C#的装箱与拆箱 什么是装箱和拆箱? 在C#中,装箱和拆箱是指在值类型和引用类型之间相互转换的过程。 装箱是将值类型转换为引用类型的过程。在装箱时,CLR会在堆上创建一个新的对象,并将值类型的值复制到堆上的新对象中,同时返回引用类型的指针。装箱操作会导致分配新的内存,增加内存的占用,并且比较耗时。 拆箱是将引用类型转换为值类型的过程。在拆箱时,CLR…

    C# 2023年6月7日
    00
  • PowerShell小技巧之执行SOAP请求

    PowerShell小技巧之执行SOAP请求 PowerShell是一种跨平台的任务自动化和配置管理框架,可以用于执行各种任务。在PowerShell中,可以使用Invoke-WebRequest cmdlet来执行SOAP请求。本文将提供详细的“PowerShell小技巧之执行SOAP请求”的完整攻略,包括如何使用Invoke-WebRequest cmd…

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