.NET 6 攻略大全(三)( 五 )


public class MyPoco{public IAsyncEnumerable<int> Data { get; set; }}
在此示例中 , 反序列化器将 IAsyncEnumerable 在返回反序列化对象之前缓冲内存中的所有内容 。 这是因为反序列化器需要在返回结果之前消耗整个 JSON 值 。
▌System.Text.Json:可写 DOM 功能
可写 JSON DOM特性为 System.Text.Json添加了一个新的简单且高性能的编程模型 。 这个新的 API 很有吸引力 , 因为它避免了需要强类型的序列化合约 , 并且与现有的 JsonDocument类型相比 , DOM 是可变的 。
这个新的 API 有以下好处:

  • 在使用POCO类型是不可能或不希望的情况下 , 或者当 JSON 模式不固定且必须检查的情况下 , 序列化的轻量级替代方案 。
  • 启用对大树子集的有效修改 。 例如 , 可以有效地导航到大型 JSON 树的子部分并从该子部分读取数组或反序列化 POCO 。 LINQ 也可以与它一起使用 。
以下示例演示了新的编程模型 。
// Parse a JSON objectJsonNode jNode = JsonNode.Parse("{"MyProperty":42}");int value = https://www.sohu.com/a/(int)jNode["MyProperty"];Debug.Assert(value =https://www.sohu.com/a/= 42);// orvalue = jNode["MyProperty"].GetValue<int>;Debug.Assert(value =https://www.sohu.com/a/= 42);// Parse a JSON arrayjNode = JsonNode.Parse("[10,11,12]");value = https://www.sohu.com/a/(int)jNode[1];Debug.Assert(value == 11);// orvalue = jNode[1].GetValue;Debug.Assert(value == 11);
// Create a new JsonObject using object initializers and array paramsvar jObject = new JsonObject{["MyChildObject"] = new JsonObject{["MyProperty"] = "Hello",["MyArray"] = new JsonArray(10, 11, 12)}};
// Obtain the JSON from the new JsonObjectstring json = jObject.ToJsonString;Console.WriteLine(json); // {"MyChildObject":{"MyProperty":"Hello","MyArray":[10,11,12]}}
// Indexers for property names and array elements are supported and can be chainedDebug.Assert(jObject["MyChildObject"]["MyArray"][1].GetValue<int> == 11);
▌ReferenceHandler.IgnoreCycles
JsonSerializer(System.Text.Json)现在支持在序列化对象图时忽略循环的能力 。 该ReferenceHandler.IgnoreCycles选项具有与 Newtonsoft.Json ReferenceLoopHandling.Ignore类似的行为 。 一个关键区别是 System.Text.Json 实现用null JSON 标记替换引用循环 , 而不是忽略对象引用 。
您可以在以下示例中看到ReferenceHandler.IgnoreCycles 的行为 。 在这种情况下 , 该Next属性被序列化为null , 因为否则它会创建一个循环 。
class Node{public string Deion { get; set; }public object Next { get; set; }}void Test{var node = new Node { Deion = "Node 1" };node.Next = node;
var opts = new JsonSerializerOptions { ReferenceHandler = ReferenceHandler.IgnoreCycles };
string json = JsonSerializer.Serialize(node, opts);Console.WriteLine(json); // Prints {"Deion":"Node 1","Next":null}}
源代码构建
通过源代码构建 , 您只需几个命令即可在您自己的计算机上从源代码构建 .NET SDK。 让我解释一下为什么这个项目很重要 。
源代码构建是一个场景 , 也是我们在发布 .NET Core 1.0 之前一直与 Red Hat 合作开发的基础架构 。 几年后 , 我们非常接近于交付它的全自动版本 。 对于 Red Hat Enterprise Linux (RHEL) .NET 用户来说 , 这个功能很重要 。 Red Hat 告诉我们 , .NET 已经发展成为其生态系统的重要开发者平台 。 好的!

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。