As of .Net 5.0,不可变类型的反序列化——以及匿名类型——由System.Text.Json
. From 如何将不可变类型和非公共访问器与 System.Text.Json 结合使用 https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-immutability?pivots=dotnet-5-0:
System.Text.Json
可以使用参数化构造函数,这使得反序列化不可变类或结构成为可能。对于一个类,如果唯一的构造函数是参数化构造函数,则将使用该构造函数。
由于匿名类型只有一个构造函数,因此现在可以成功反序列化它们。为此,请定义一个辅助方法,如下所示:
public static partial class JsonSerializerExtensions
{
public static T? DeserializeAnonymousType<T>(string json, T anonymousTypeObject, JsonSerializerOptions? options = default)
=> JsonSerializer.Deserialize<T>(json, options);
public static ValueTask<TValue?> DeserializeAnonymousTypeAsync<TValue>(Stream stream, TValue anonymousTypeObject, JsonSerializerOptions? options = default, CancellationToken cancellationToken = default)
=> JsonSerializer.DeserializeAsync<TValue>(stream, options, cancellationToken); // Method to deserialize from a stream added for completeness
}
现在你可以这样做:
var token = JsonSerializerExtensions.DeserializeAnonymousType(jsonStr, new { token = "" }).token;
演示小提琴here https://dotnetfiddle.net/kR5gHH.