迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

将 JSON 字符串转换为 C# 对象

作者:迹忆客 最近更新:2024/01/16 浏览次数:

本教程将演示如何使用两种不同的方法将 JSON 字符串转换为 C# 对象。

第一个使用 Newtonsoft.Json 库,而第二个使用 JavaScriptSerializer。这两种方法相似,但使用的语法略有不同,并且需要不同的引用。


使用 Newtonsoft.Json 将 JSON 字符串转换为 C# 对象

Newtonsoft.Json 库是 .NET 的常用 JSON 框架。在将软件包安装到你的解决方案后,可以使用此库。你可以使用带有以下命令的 .NET CLI 来安装软件包。

> dotnet add package Newtonsoft.Json --version 13.0.1

JSON 字符串可以转换为任何类型的 C# 对象,只要它是对象类型的有效 JSON 字符串即可。这是通过反序列化字符串、将其转换为指定类型 (T) 并提供输入 JSON 字符串来完成的。

JsonConvert.DeserializeObject<T>(json_string);

使用 JavaScriptSerializer 将 JSON 字符串转换为 C# 对象

将 JSON 字符串转换为 C# 对象的旧选项是 JavaScriptSerializer。虽然它没有 Newtonsoft.Json 解决方案那么快,但它仍然可以很好地利用。要使用此方法,你需要在项目中添加对 System.Web.Extensions.dll 的引用。

要添加该引用,请按照以下步骤操作。

  • 导航到解决方案资源管理器
  • 右键单击引用
  • 点击添加引用
  • 单击左侧的 Assemblies 选项卡
  • 找到 System.Web.Extensions.dll 文件并单击 OK

JavaScriptSerializer 的工作方式与 Newtonsoft.Json 方法类似,因为它只需要 JSON 字符串和要反序列化的类型。

JavaScriptSerializer().Deserialize<T>(json_string)

将 JSON 字符串转换为 C# 对象代码示例

下面的代码示例演示了如何使用 JsonConvert.DeserializeObject<T>JavaScriptSerializer 函数将 JSON 字符串转换为任何类型的 C# 对象。对于此示例,我们将字符串转换为包含整数的列表对象 (List<Int32>) 以及我们在程序中指定的自定义类。

using Newtonsoft.Json;
using System.Data;
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace JSON_To_Object_Example {
  class Program {
    static void Main(string[] args) {
      // Declare the JSON Strings
      string list_str = "[1, 2, 3, 9, 8, 7]";
      string custom_class_str =
          "{ \"Name\":\"John Doe\",\"Age\":21,\"Birthday\":\"2000-01-01T00:00:00\"}";

      // ----- Newtonsoft Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_ns = JsonConvert.DeserializeObject<List<Int32>>(list_str);

      // Print the contents of the newly converted List object to the Console.
      Console.WriteLine("Converted List - Newtonsoft: " + String.Join(", ", list_converted_ns) +
                        "\n");

      // The same can be done for any type of C# object, including custom classes. Just change the
      // specified Type.
      Custom_Class class_converted_ns =
          JsonConvert.DeserializeObject<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - Newtonsoft:");
      PrintPropreties(class_converted_ns);

      Console.WriteLine("\n\n");

      // ----- JavaScriptSerializer Method -----
      // Deserialize the string by specifying the object type
      List<Int32> list_converted_js = new JavaScriptSerializer().Deserialize<List<Int32>>(list_str);
      Console.WriteLine(
          "Converted List - JavaScriptSerializer: " + String.Join(", ", list_converted_js) + "\n");

      Custom_Class class_converted_js =
          new JavaScriptSerializer().Deserialize<Custom_Class>(custom_class_str);
      Console.WriteLine("Converted Class - JavaScriptSerializer:");
      PrintPropreties(class_converted_js);
      Console.ReadLine();
    }

    public class Custom_Class {
      // Custom Class created for the purposes of this tutorial
      public string Name { get; set; }
      public int Age { get; set; }
      public DateTime Birthday { get; set; }
    }

    public static void PrintPropreties(object obj) {
      // Uses the System.Component Model to read each property of a class and print its value
      foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj)) {
        string name = descriptor.Name;
        object value = descriptor.GetValue(obj);
        Console.WriteLine("{0}: {1}", name, value);
      }
    }
  }
}

此代码将输出由逗号连接的整数列表以及转换后的自定义类中的所有属性。你可以观察到两种方法都会产生相同的输出。

输出:

Converted List - Newtonsoft: 1, 2, 3, 9, 8, 7

Converted Class - Newtonsoft:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am



Converted List - JavaScriptSerializer: 1, 2, 3, 9, 8, 7

Converted Class - JavaScriptSerializer:
Name: John Doe
Age: 21
Birthday: 01/01/2000 12:00:00 am

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C# 中按值对字典排序

发布时间:2024/01/19 浏览次数:153 分类:编程语言

有两种主要方法可用于按 C# 中的值对字典进行排序:list 方法和 Linq 方法。使用 C# 中的 List 方法按值对字典进行排序。C# 字典数据结构以 key:value 对的形式存储数据。

在 C# 中更新字典值

发布时间:2024/01/19 浏览次数:72 分类:编程语言

本教程演示如何使用键作为索引来更新 C# 字典中的值。dictionary 是一种集合类型,与只能通过索引或值本身访问值的数组或列表不同,字典使用键和值对来存储其数据。

在 C# 中检查字典键是否存在

发布时间:2024/01/19 浏览次数:142 分类:编程语言

本文教我们如何检查或检测 C# 中是否存在字典键。Dictionary 倾向于映射键和值。它包含特定值映射到的特定键。不允许有重复的键,这是字典的全部目标。

C# 中的字典与哈希表

发布时间:2024/01/19 浏览次数:166 分类:编程语言

本指南将讨论 C# 中 Dictionary 和 Hashtable 之间的区别。你应该更喜欢哪一个?本指南将讨论 C# 中 Dictionary 和 Hashtable 之间的区别。

在 C# 中将字符串转换为字符

发布时间:2024/01/19 浏览次数:85 分类:编程语言

有四种主要方法可以在 C# 中将字符串转换为字符,即 char.Parse()、string[index]、string.ToCharArray()和 LINQ 方法。

C# 获取当前文件夹路径

发布时间:2024/01/18 浏览次数:172 分类:编程语言

本文方法介绍了在 C# 中获取当前文件夹路径的不同方法。它介绍了诸如 GetCurrentDirectory(),GetDirectoryName()和 Environment.CurrentDirectory 之类的方法。

如何在 C# 中创建文件夹

发布时间:2024/01/18 浏览次数:61 分类:编程语言

本文介绍了如何在 C# 中创建一个不存在的新文件夹。它包括 CreateDirectory()方法。使用 CreateDirectory() 方法在 C# 中创建一个文件夹

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便