[英]Deserialize anonymous type with System.Text.Json
我正在為 .NET Core 3.x 更新一些應用程序,作為其中的一部分,我試圖從Json.NET
轉移到新的System.Text.Json
類。 使用 Json.NET,我可以反序列化一個匿名類型,如下所示:
var token = JsonConvert.DeserializeAnonymousType(jsonStr, new { token = "" }).token;
新命名空間中是否有等效的方法?
作為 。 Net 5.0 中, System.Text.Json
支持不可變類型的反序列化,從而支持匿名類型。 從How to use immutable types and non-public accessors with System.Text.Json :
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;
演示小提琴在這里。
請試試我作為 System.Text.Json 擴展編寫的這個庫,以提供缺少的功能: https : //github.com/dahomey-technologies/Dahomey.Json 。
您會發現對匿名類型的支持。
通過在 JsonSerializerOptions 上調用命名空間 Dahomey.Json 中定義的擴展方法 SetupExtensions 來設置 json 擴展:
JsonSerializerOptions options = new JsonSerializerOptions();
options.SetupExtensions();
然后使用 JsonSerializerExtensions 靜態類型序列化您的類:
var token = JsonSerializerExtensions.DeserializeAnonymousType(jsonStr, new { token = "" }, options).token;
我正在更新.NET Core 3.x的一些應用程序,作為其中的一部分,我試圖從Json.NET
遷移到新的System.Text.Json
類。 使用Json.NET,我可以反序列化匿名類型,如下所示:
var token = JsonConvert.DeserializeAnonymousType(jsonStr, new { token = "" }).token;
新名稱空間中是否存在等效的方法?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.