.NET Core手记 - Json.NET的使用

Posted msp的昌伟哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET Core手记 - Json.NET的使用相关的知识,希望对你有一定的参考价值。

Json.NET大家很熟悉了,很流行的高性能Json库,很棒的是Json.NET也支持了.NET Standard框架,也就意味着我们可以在.NET Core项目里使用了。

 

创建一个.NET Core项目


 

这里使用命令行来创建,各个操作系统上做法都一致。执行以下代码即可:

  1. mkdir Test 创建一个Test文件夹
  2. cd Test 进入Test文件夹
  3. dotnet new 创建一个新的.NET Core项目

一个全新的.NET Core项目会由以下文件组成:

  • Program.cs 主程序入口
  • project.json 项目配置文件

 

 

执行dotnet restore命令后项目会根据project.json文件配置来恢复项目依赖包,同时就会生成新的project.json.lock文件、bin和obj目录。

运行dotnet run即可看到示例输出,如下:

 

 

使用Json.NET


 

集成Json.NET方法很简单,只需要在project.json里添加指定的字段即可,如下:

 

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    },
    "Newtonsoft.Json": "9.0.1",
    
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

 

此时你使用Json.NET进行简单操作,一切都正常,如下:

 

 public static void Main(string[] args)
        {
            var data = new {
                Name = "Changwei",
                Age = 23
            };

            var json = JObject.FromObject(data);

            Console.WriteLine(json.ToString());


        }

输出结果也正常,如下:

 

 

 

之前在RC版本中如果你调用Json.NET进行序列化操作就会发现异常,异常是由于缺少依赖项 System.Runtime.Serialization.Primitives 导致的,需要手动引用此依赖包。

但是正式版好像已经修复此问题了,执行序列化操作一切正常,如下:

 

public class Program
    {
        public static void Main(string[] args)
        {
            var list = new Person[10];
            for(var i = 0; i < 10; i++){
                var data = new Person{
                    Name = "Changwei_" + i,
                    Age = i + 20
                };

                list[i] = data;

            }

            var jsonSerializer = new JsonSerializer();
            var stringWriter = new StringWriter();
            var jsonWriter = new JsonTextWriter(stringWriter);
            jsonSerializer.Serialize(jsonWriter, list);

            Console.WriteLine(stringWriter.ToString());

            var jsonArray = JArray.FromObject(list);
            Console.WriteLine(jsonArray.ToString());


        }


    }

    public class Person{
        public string Name { get; set; }
        public int Age { get; set; }
    }

 

输出结果正常,如下:

 

 

 目前看来很多项目都在完善中,.NET Core依赖包自动引用的问题不知有没有解决,但是Json.NET的使用目前已经没问题了。

以上是关于.NET Core手记 - Json.NET的使用的主要内容,如果未能解决你的问题,请参考以下文章

使用新的 Net Core 3.0 Json 时忽略属性

.Net Core 3.0原生Json解析器

Json.Net 在.Net Core 2.0 中序列化DataSet 问题

如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?

asp.net core 2.0 Json结果的格式

无法访问 Newtonsoft.JSON .Net Core 2.* 方法