[译]如何使用C#和Newtonsoft.Json处理JSON?

作者: SIDDHARTH PANDEY原文地址

在这篇文章中,我将告诉您如何使用C#和Newtonsoft.JSON处理JSON并使用适当的代码。Json是一个流行的用于.NET的高性能Json框架,Json.NET也知道它。

什么是JSON?

JSON(JavaScript对象表示法)是一种轻量级数据交换格式。人类读写起来很容易。机器很容易解析和生成。它是基于JavaScript编程语言的一个子集,标准ECMA-262第3版-1999年12月。JSON是一种完全独立于语言的文本格式,但使用的是C语言家族程序员熟悉的约定,包括C、C++、C语言、java、JavaScript、Perl、Python和许多其他。这些属性使JSON成为理想的数据交换语言。
 http://www.json.org/

我已经在Visual Studio 2015中创建了一个控制台应用程序,这样就很容易编写我的程序并在控制台中快速查看输出。为了使用C#处理JSON,下一步是使用Nuget包管理器将Newtonsoft.JSON框架安装到此项目中。

以下是使用Newtonsoft.Json框架轻松序列化和反序列化Json的方法:

  • JsonSerializer 是在JSON文本和.NET对象之间进行转换的最快方法。它通过将.NET对象属性名称映射到JSON属性名称并复制值,将.NET对象转换为其JSON等效对象并再次转换。
  • JsonConvert 对于希望转换为JSON字符串或从JSON字符串转换为JSON字符串的简单情况非常有用。这提供了JsonConvert上的SerializeObject()和DeserializeObject()方法,为JsonSerializer提供了一个易于使用的包装器。

我还创建了一个名为Author的类,如下所示,该类将用于反序列化的对象类型。

public class Author
{
    public string Name { get; set; }
 
    public List<string> Courses { get; set; }
 
    public DateTimeOffset Since { get; set; }
 
    public bool IsHappy { get; set; }
 
    public string Country { get; set; }
 
    public int Age { get; set; }
 
    public List<Author> FavouriteAuthors { get; set; }
 }

要运行应用程序并在控制台中查看结果,我在Program.cs文件中执行了以下操作:

class Program
{
    static void Main(string[] args)
    {
        Console.Clear();
 
        JsonConvertDemo.ShowDemo();
 
        Console.ReadLine();
    }
}

接下来,我创建了另一个名为JsonConvertDemo的类,该类只有一个名为ShowDemo的方法,如下所示:

public class JsonConvertDemo
{
 
    private static string authorRawData = @"{
                                          'Name': 'Sid',
                                          'Courses': [
                                            'Course 1',
                                            'Course 2'
                                          ],
                                          'Since': '2017-03-01T22:09:39.9369001+00:00',
                                          'IsHappy': true,
                                          'Country': 'India',
                                          'Age': 25
                                        }";
 
    public static void ShowDemo()
    {
        Console.WriteLine("Follow is the JSON raw data:");
        Console.WriteLine(authorRawData);
 
        var author = JsonConvert.DeserializeObject<Author>(authorRawData);
        Console.WriteLine(Environment.NewLine + author.Name + " is an author from " + author.Country);
 
        string serializedAuthorData = JsonConvert.SerializeObject(author);
        Console.WriteLine(Environment.NewLine + serializedAuthorData);
 
        string formattedSerializedAuthorData = JsonConvert.SerializeObject(author, Formatting.Indented);
        Console.WriteLine(Environment.NewLine + formattedSerializedAuthorData);
    }
}
  • 第19行写入在第4行名为authorRawData的私有变量中定义的JSON author数据。
  • 在第21行,我们使用DeserializeObject方法将字符串转换为.NET对象。注意传递给方法的类型,该方法是要反序列化到的对象的类型。第22行写作者的姓名和国家。
  • 第24行使用SerializeObject方法将author对象转换回字符串格式,并在下一行将其添加到控制台。控制台中的输出没有按预期的方式格式化。
  • 第27行还序列化了对象,但通过传递Formatting.Indented作为基础Newtonsoft.Json.JsonTextWriter的格式化选项,使用了SerlializeObject的重载之一。当这个新对象被写到控制台时,输出就被正确格式化了。

我希望这有助于理解如何使用C#和Newtonsoft.JSON处理JSON。我很快会写更多关于这个流行的高性能JSON框架的文章。如果你想得到更新,请订阅我的博客。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

8 + 17 =