C#实现json格式数据解析功能的方法详解

C#实现json格式数据解析功能的方法详解

什么是JSON

JSON(JavaScript Object Notation,JavaScript对象表示法),是一种轻量级的数据交换格式。JSON文本以纯文本方式表示,并且可以被多种编程语言解析和生成。

JSON由两种数据结构组成:

  • 键值对集合,用于表示对象或复杂数据结构。
  • 值列表,用于表示数组或简单数据结构。

JSON数据有以下特点:

  • 可读性强,在程序员之间使用非常流行。
  • 所有的现代编程语言都支持JSON。
  • 不依赖于任何语言。

常用的C# JSON解析库

目前在C#中实现JSON解析的库有许多,比如:

  • Json.NET(Newtonsoft.Json)
  • System.Text.Json
  • fastJSON
  • SimpleJson

这里我们主要介绍Json.NET和System.Text.Json两个库,它们都是由Microsoft所提供的,并且都是开源的,非常容易上手。

Json.NET

Json.NET是一个常用的、活跃的Json解析库,它提供了从Json到.Net对象和从.Net对象到Json的序列化和反序列化功能。

优点

  • 可以处理Json中任意的多层嵌套结构。
  • 可以处理不规则的Json格式。
  • 支持Json中的转义字符。
  • 速度较快。

示例

Json到.NET对象

下面是一个Json对象:

{
    "name": "John Smith",
    "email": "john.smith@example.com",
    "age": 25,
    "address": {
        "city": "New York",
        "zip": "10001"
    },
    "phoneNumbers": [
        {
            "type": "home",
            "number": "123-456-7890"
        },
        {
            "type": "work",
            "number": "098-765-4321"
        }
    ]
}

我们可以使用Json.NET将其转换为.Net对象:

using Newtonsoft.Json;

string json = @"{
    ""name"": ""John Smith"",
    ""email"": ""john.smith@example.com"",
    ""age"": 25,
    ""address"": {
        ""city"": ""New York"",
        ""zip"": ""10001""
    },
    ""phoneNumbers"": [
        {
            ""type"": ""home"",
            ""number"": ""123-456-7890""
        },
        {
            ""type"": ""work"",
            ""number"": ""098-765-4321""
        }
    ]
}";

dynamic result = JsonConvert.DeserializeObject(json);

string name = result.name;
string email = result.email;
int age = result.age;
string city = result.address.city;
string homePhone = result.phoneNumbers[0].number;
string workPhone = result.phoneNumbers[1].number;

.NET对象到Json

下面是一个.Net对象:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
    public Address Address { get; set; }
    public List<PhoneNumber> PhoneNumbers { get; set; }
}

public class Address
{
    public string City { get; set; }
    public string Zip { get; set; }
}

public class PhoneNumber
{
    public string Type { get; set; }
    public string Number { get; set; }
}

我们可以使用Json.NET将其转换为Json字符串:

using Newtonsoft.Json;

Person person = new Person
{
    Name = "John Smith",
    Age = 25,
    Email = "john.smith@example.com",
    Address = new Address
    {
        City = "New York",
        Zip = "10001"
    },
    PhoneNumbers = new List<PhoneNumber>
    {
        new PhoneNumber
        {
            Type = "home",
            Number = "123-456-7890"
        },
        new PhoneNumber
        {
            Type = "work",
            Number = "098-765-4321"
        }
    }
};

string json = JsonConvert.SerializeObject(person);

System.Text.Json

System.Text.Json是Microsoft在.NET Core 3.0中提供的新的Json解析库,它对Json.NET进行了优化和改进。

优点

  • 支持异步操作。
  • 支持JsonPropertyName自定义属性名。
  • 内存开销较小。
  • 解析速度比Json.NET更快。

示例

Json到.NET对象

下面是一个Json对象:

{
    "name": "John Smith",
    "email": "john.smith@example.com",
    "age": 25,
    "address": {
        "city": "New York",
        "zip": "10001"
    },
    "phoneNumbers": [
        {
            "type": "home",
            "number": "123-456-7890"
        },
        {
            "type": "work",
            "number": "098-765-4321"
        }
    ]
}

我们可以使用System.Text.Json将其转换为.Net对象:

using System.Text.Json;

string json = @"{
    ""name"": ""John Smith"",
    ""email"": ""john.smith@example.com"",
    ""age"": 25,
    ""address"": {
        ""city"": ""New York"",
        ""zip"": ""10001""
    },
    ""phoneNumbers"": [
        {
            ""type"": ""home"",
            ""number"": ""123-456-7890""
        },
        {
            ""type"": ""work"",
            ""number"": ""098-765-4321""
        }
    ]
}";

var document = JsonDocument.Parse(json);
var root = document.RootElement;

string name = root.GetProperty("name").GetString();
string email = root.GetProperty("email").GetString();
int age = root.GetProperty("age").GetInt32();
string city = root.GetProperty("address").GetProperty("city").GetString();
string homePhone = root.GetProperty("phoneNumbers")[0].GetProperty("number").GetString();
string workPhone = root.GetProperty("phoneNumbers")[1].GetProperty("number").GetString();

.NET对象到Json

下面是一个.Net对象:

public class Person
{
    [JsonPropertyName("name")]
    public string Name { get; set; }
    [JsonPropertyName("age")]
    public int Age { get; set; }
    [JsonPropertyName("email")]
    public string Email { get; set; }
    [JsonPropertyName("address")]
    public Address Address { get; set; }
    [JsonPropertyName("phoneNumbers")]
    public List<PhoneNumber> PhoneNumbers { get; set; }
}

public class Address
{
    [JsonPropertyName("city")]
    public string City { get; set; }
    [JsonPropertyName("zip")]
    public string Zip { get; set; }
}

public class PhoneNumber
{
    [JsonPropertyName("type")]
    public string Type { get; set; }
    [JsonPropertyName("number")]
    public string Number { get; set; }
}

我们可以使用System.Text.Json将其转换为Json字符串:

using System.Text.Json;

Person person = new Person
{
    Name = "John Smith",
    Age = 25,
    Email = "john.smith@example.com",
    Address = new Address
    {
        City = "New York",
        Zip = "10001"
    },
    PhoneNumbers = new List<PhoneNumber>
    {
        new PhoneNumber
        {
            Type = "home",
            Number = "123-456-7890"
        },
        new PhoneNumber
        {
            Type = "work",
            Number = "098-765-4321"
        }
    }
};

var options = new JsonSerializerOptions
{
    WriteIndented = true
};
string json = JsonSerializer.Serialize(person, options);

结论

Json.NET和System.Text.Json都是非常流行、易于上手的C# Json解析库。你可以根据你的需求选择使用其中的一种,或者将它们结合使用。

无论你使用哪种Json解析库,你都应该熟悉Json的格式,并且掌握Json解析和生成的基本方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现json格式数据解析功能的方法详解 - Python技术站

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

相关文章

  • PHP的Json中文处理解决方案

    以下是 PHP 的 Json 中文处理解决方案的完整攻略。 1. 背景介绍 在 PHP 中,我们经常需要将数据以 JSON 的格式进行传输或存储。然而,如果 JSON 中含有中文字符,那么就会出现编码问题,导致中文字符被转义为 Unicode 码,给使用和阅读带来不便。 2. 解决方案 我们可以采用 PHP 内置的 addslashes() 函数或使用 JS…

    C 2023年5月23日
    00
  • C语言字符串的安全问题

    C语言字符串的安全问题指的是当我们使用字符串时产生的一些潜在安全隐患,比如缓冲区溢出、格式化字符串漏洞等,这些问题可能会导致程序崩溃或者受到攻击。 为了解决这些安全问题,我们需要采取一些措施,下面是几个实用的方法: 1. 使用安全的字符串函数 在C语言中,有一些常用的字符串函数存在一些潜在的安全问题,比如strcpy和strcat等函数,如果不小心使用这些函…

    C 2023年5月10日
    00
  • Python实现将字典内容写入json文件

    Python是一种非常强大的编程语言,也是一种非常受欢迎的数据处理工具。Python也是解析JSON格式数据的一种非常常用的方式。下面是“Python实现将字典内容写入JSON文件”的完整攻略: 第一步:导入json模块 Python支持读写JSON格式的数据,需要先导入json模块。在Python标准库中,json模块提供了两个方法load()和dump(…

    C 2023年5月23日
    00
  • C#实现任意数据类型转成json格式输出

    C#是一种强类型语言,而JSON是一种轻量级的数据交换格式。在C#中,将任意数据类型转换为JSON格式可以便于进行数据传输、数据存储和Web服务请求等操作。下面是实现任意数据类型转换为JSON格式的攻略: 第一步:导入Json.NET库 在C#中,我们可以使用Json.NET库来实现JSON格式的转换。我们可以在Visual Studio中通过NuGet包管…

    C 2023年5月23日
    00
  • C++ pair的用法实例详解

    C++ pair的用法实例详解 简介 std::pair 是C++标准库中的一个数据结构,用于表示一个键值对。其中,键和值的数据类型可以不同,因此 std::pair 可以同时包含两个不同类型的对象。本文将详细介绍 std::pair 的定义方式,方法和示例。 定义与初始化 std::pair 内部的两个元素可以通过 first 和 second 访问,因此…

    C 2023年5月22日
    00
  • VSCode断点调试CMake工程项目的实现步骤

    以下是详细讲解“VSCode断点调试CMake工程项目的实现步骤”的完整攻略。 1. 安装必要的插件 在使用VSCode进行CMake项目的断点调试,我们需要安装一些必要的插件。这些插件包括: C/C++插件 CMake工具插件 Debugger for gdb插件 在VSCode中打开扩展选项卡,搜索并安装上述插件。 2. 配置工程项目 在开始断点调试前,…

    C 2023年5月23日
    00
  • win7系统打开程序提示应用程序正常初始化0xc0000142失败的原因及解决方法

    win7系统打开程序提示应用程序正常初始化0xc0000142失败的原因及解决方法 问题描述 在使用Windows 7系统时,打开应用程序时会出现提示“应用程序无法启动,应用程序无法正常初始化(0xc0000142)。单击确认关闭应用程序。”的错误提示。 原因分析 0xc0000142错误通常指的是程序无法正常初始化,可能由于以下原因导致: 应用程序的关键文…

    C 2023年5月23日
    00
  • 基于opencv的selenium滑动验证码的实现

    首先需要明确的是,基于opencv的selenium滑动验证码实现主要考察的是图像识别和模拟鼠标操作的能力。下面是详细的攻略: 步骤一:收集参考图片和滑块图片 首先需要在浏览器中打开目标网站,然后找到需要滑动验证码的页面。在这个页面中,需要使用开发者工具的元素选择器找到验证码区域的HTML元素,然后通过selenium的接口获取到该元素的截图,作为参考图片。…

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