提问者:小点点

.Net JsonSerializer不序列化元组的值


JSON序列化器返回一个空JSON对象。

using System.Text.Json;

(int, int) tuple1 = (1, 2);
var token = JsonSerializer.Serialize(tuple1); // return empty object {}

(int item1, int item2) tuple2 = (1, 2);
token = JsonSerializer.Serialize(tuple2); // return empty object {}

(int item1, int item2) tuple3 = (item1:1, item2:2);
token = JsonSerializer.Serialize(tuple3); // return empty object {}

它可以通过许多变通方法

我试图理解为什么或者是什么阻止序列化程序理解元组

是否与元组的结构有关


共1个答案

匿名用户

ValueTuple没有属性,只有公共字段。直到。NET 6, System.文本。Json只序列化公共属性。这是最常见的情况,因为字段被视为实现,而不是对象API的一部分。所有序列化器都将属性优先于字段,除非指示也要序列化字段。

.NET6添加了以类似于其他序列化程序的方式序列化字段的功能,可以使用字段上的属性或序列化程序设置。

由于无法向元组字段添加属性,因此可以使用设置:

var options = new JsonSerializerOptions
{
    IncludeFields = true,
};
var json = JsonSerializer.Serialize(tuple1, options);

这就产生了:

 {"Item1":1,"Item2":2}