当前位置: 首页 > news >正文

网站建设虚拟服务器怎么做网站音乐

网站建设虚拟服务器,怎么做网站音乐,企业需求做网站在哪儿交易,wordpress 发文章漏洞在.NET 6.0中,JSON处理库得到了显著的改进,主要体现在System.Text.Json上。以下是对.NET 6.0中改进的JSON处理库的详细分析: 一、System.Text.Json的引入与优势 在.NET 6中,Microsoft引入了新的JSON库System.Text.Json作为官方推…

在.NET 6.0中,JSON处理库得到了显著的改进,主要体现在System.Text.Json上。以下是对.NET 6.0中改进的JSON处理库的详细分析:

一、System.Text.Json的引入与优势

在.NET 6中,Microsoft引入了新的JSON库System.Text.Json作为官方推荐的序列化框架,取代了以前常用的Newtonsoft.Json(Json.NET)。System.Text.Json提供了以下优势:

  1. 性能提升:System.Text.Json使用了更少的内存开销,并且在处理大量数据时有显著的速度优势。这得益于其高效的序列化和反序列化机制,以及针对JSON处理进行的深度优化。
  2. API更简洁:System.Text.Json的API设计更为直观和简单,许多操作可以直接通过LINQ表达式完成。这使得开发者在处理JSON数据时更加便捷和高效。
  3. 兼容性强:虽然Json.NET支持的功能丰富,但大部分情况下System.Text.Json足够满足需求。同时,它能更好地与.NET的其他部分集成,提供了一致的编程体验。

二、System.Text.Json的新特性

在.NET 6中,System.Text.Json引入了多项新特性,以增强其功能和灵活性:

2.1 忽略循环引用

在.NET 6中,System.Text.Json允许在序列化时忽略循环引用,避免了因循环依赖而导致的异常。这通过JsonSerializerOptions中的ReferenceHandler.IgnoreCycles选项来实现。

using System;  
using System.Text.Json;  
using System.Text.Json.Serialization;  public class Person  
{  public string Name { get; set; }  public Person BestFriend { get; set; }  
}  public class Program  
{  public static void Main()  {  var person = new Person  {  Name = "Alice",  BestFriend = new Person  {  Name = "Bob",  BestFriend = new Person { Name = "Alice" } // 循环引用  }  };  var options = new JsonSerializerOptions  {  ReferenceHandler = ReferenceHandler.IgnoreCycles  };  string json = JsonSerializer.Serialize(person, options);  Console.WriteLine(json);  }  
}

在这个例子中,Person类有一个BestFriend属性,它指向另一个Person对象。如果BestFriend的BestFriend又指向原始对象,就会形成循环引用。通过设置JsonSerializerOptions的ReferenceHandler为IgnoreCycles,System.Text.Json会忽略这种循环引用,避免序列化时出现异常。 

2.2 序列化和反序列化的通知

System.Text.Json公开了序列化和反序列化的通知接口,如IJsonOnDeserialized、IJsonOnDeserializing、IJsonOnSerialized和IJsonOnSerializing。这使得开发者可以在序列化和反序列化过程中执行自定义逻辑。

using System;  
using System.Text.Json;  
using System.Text.Json.Serialization;  public class Person  
{  [JsonPropertyName("name")]  public string Name { get; set; }  [OnDeserialized]  public void OnDeserialized()  {  Console.WriteLine("Deserialized!");  }  [OnDeserializing]  public void OnDeserializing()  {  Console.WriteLine("Deserializing!");  }  [OnSerialized]  public void OnSerialized()  {  Console.WriteLine("Serialized!");  }  [OnSerializing]  public void OnSerializing()  {  Console.WriteLine("Serializing!");  }  
}  public class Program  
{  public static void Main()  {  var person = new Person { Name = "Alice" };  string json = JsonSerializer.Serialize(person);  Console.WriteLine(json);  Person deserializedPerson = JsonSerializer.Deserialize<Person>(json);  }  
}

在这个例子中,Person类实现了IJsonOnDeserialized、IJsonOnDeserializing、IJsonOnSerialized和IJsonOnSerializing接口中的方法。这些方法在序列化和反序列化过程中会被自动调用,允许开发者在这些过程中执行自定义逻辑。

2.3 属 性排序支持

通过JsonPropertyOrderAttribute特性,System.Text.Json允许控制属性的序列化顺序。这解决了之前序列化顺序由反射顺序决定的问题,提供了更灵活的属性排序方式。

using System;  
using System.Text.Json;  
using System.Text.Json.Serialization;  [JsonPropertyOrder(nameof(LastName), nameof(FirstName))]  
public class Person  
{  public string FirstName { get; set; }  public string LastName { get; set; }  
}  public class Program  
{  public static void Main()  {  var person = new Person { FirstName = "John", LastName = "Doe" };  string json = JsonSerializer.Serialize(person);  Console.WriteLine(json); // 输出: {"LastName":"Doe","FirstName":"John"}  }  
}

在这个例子中,Person类使用了JsonPropertyOrderAttribute来指定属性的序列化顺序。在这个例子中,LastName会在FirstName之前被序列化。 

2.4 Utf8JsonWriter的使用

System.Text.Json提供了Utf8JsonWriter类,用于高效地编写原始JSON。这使得开发者可以直接操作JSON的字节流,提高了JSON生成的效率和灵活性。

using System;  
using System.Buffers.Text;  
using System.Text.Json;  public class Program  
{  public static void Main()  {  using (var doc = new Utf8JsonWriter(new ArrayBufferWriter<byte>()))  {  doc.WriteStartObject();  doc.WriteString("name", "Alice");  doc.WriteNumber("age", 30);  doc.WriteEndObject();  string json = Encoding.UTF8.GetString(doc.Flush());  Console.WriteLine(json);  }  }  
}
2.5 对IAsyncEnumerable的支持

System.Text.Json现在支持(反)序列化JSON数组为IAsyncEnumerable<T>类型,这使得在处理大量数据时可以更加高效地利用异步编程模式。

using System;  
using System.Collections.Generic;  
using System.IO;  
using System.Linq;  
using System.Text.Json;  
using System.Threading.Tasks;  public class Program  
{  public static async Task Main()  {  async IAsyncEnumerable<int> GetNumbersAsync()  {  for (int i = 0; i < 10; i++)  {  await Task.Delay(100); // 模拟异步操作  yield return i;  }  }  using (var stream = new MemoryStream())  using (var writer = new Utf8JsonWriter(stream))  {  writer.WriteStartArray();  await foreach (var number in GetNumbersAsync())  {  writer.WriteNumberValue(number);  }  writer.WriteEndArray();  string json = Encoding.UTF8.GetString(stream.ToArray());  Console.WriteLine(json);  }  }  
}

在这个例子中,GetNumbersAsync是一个返回IAsyncEnumerable<int>的异步方法。Utf8JsonWriter被用来将异步生成的数字序列化为JSON数组。这种方式对于处理大量数据或需要异步操作的场景特别有用。

三、与Newtonsoft.Json的比较

尽管Newtonsoft.Json在过去一直是.NET生态中处理JSON的流行选择,但System.Text.Json在.NET 6中的引入提供了以下优势:

  1. 性能优势:System.Text.Json在性能和内存使用方面通常优于Newtonsoft.Json,特别是在处理大量数据时。
  2. 内置支持:System.Text.Json内置于.NET 6核心库中,不需要额外安装,降低了项目的依赖性和复杂性。
  3. 一致性:System.Text.Json与.NET的其他部分更好地集成,提供了一致的编程体验。

然而,Newtonsoft.Json仍然是一个功能丰富的JSON库,提供了许多高级特性和自定义选项。如果项目需要这些高级特性或已经在使用Newtonsoft.Json,并且没有性能或内存使用方面的问题,那么继续使用Newtonsoft.Json也是一个可行的选择。

综上所述,.NET 6.0中的System.Text.Json库在性能、API简洁性、兼容性以及新特性方面都有显著的改进。这些改进使得System.Text.Json成为处理JSON数据的强大工具,为.NET开发者提供了更高效、更便捷的JSON处理能力。

http://www.yayakq.cn/news/663258/

相关文章:

  • 建一个英文网站需要多少钱洋桥网站建设
  • 天津企业做网站多少钱ps案例教程网站
  • 境外网站搭建wordpress比织梦安全吗
  • 网站广告代码检测asp.net做学校网站首页
  • 推广网站怎么建网页设计素材网站集
  • 南宁企业网站设计公网页设计图片加载不出
  • 网站开发交付样品门展厅设计图片
  • 延庆青岛网站建设网站的建设服务平台
  • 好网站旅游网站模块分类
  • 网站建设背景浅变色怎么调出来个人域名备案做企业网站
  • 网站设计成手机如何在建设厅网站投诉
  • app和微网站的对比分析市场营销毕业后找什么工作
  • 长沙武广新城建设网站做企业网站需要什么条件
  • 网站开发实验报告模版长沙企业网站建设团队
  • 郑州网站专业制作wordpress 代码规范
  • 5分钟建站wordpress深圳营销型网站
  • 石家庄网站建设咨询薇一键生成静态网页
  • 兰州 网站制作池州建设网站
  • 找专题页面那个网站好阿里云自带wordpress
  • 安徽网站优化价格咨询wordpress使用hhvm
  • 深圳平台型网站建设公司国外免费空间建网站
  • 江宁网站制作网页设计网站网站建设课程设计
  • 外贸移动商城网站建设机械设备asp企业网站源码下载
  • 一个教做网页的网站芜湖服装网站建设
  • 网站自动售卡怎么做jsp网站建设项目实战总结
  • 装饰工程东莞网站建设网络运营怎么学
  • 淘宝客自建网站邮箱发网站建设主题怎么写
  • 网站联系方式设置要求山东泰山新闻
  • 微信公众号运营规则新乡百度关键词优化外包
  • 网站空间格式asp网站开发 密码