簡體   English   中英

針對匿名對象的 System.Text.Json 序列化

[英]System.Text.Json serialization against an anonymous object

我正在開發一個 ASP .Net Core 3.1 應用程序,使用 2.2 從另一個應用程序移植部分代碼。 到目前為止,我想從 NewtonSoft JSON 序列化庫切換到新的 System.Text.Json,但是我遇到了一些麻煩。

考慮使用此返回類型為 HTTP-GET 服務提供服務的函數:

    [HttpGet("myservice")]
    public async Task<ActionResult<object>> GetDataAsync( ...

然后,最后一部分可以描述如下:

        var items = new List<IMyInterface>();
        int totalCount = ...
        int min = ...
        int max = ...

        return new ActionResult<object>(new
        {
            totalCount,
            min,
            max,
            items
        });

但是,它不起作用:項目集合按其聲明的類型(IMyInterface)而不是實際類型進行序列化。 在這里讀到這是一種預期的行為,盡管對我來說不是那么直觀。

我的問題是:是否有任何方便而可靠的方法來利用新的序列化程序甚至處理匿名對象? 每次我可以內聯組合結果時,我都會避免創建一個特定的對象。

更新:

這樣做似乎有效,但看起來真的很難看:

        return new ActionResult<object>(new
        {
            totalCount,
            min,
            max,
            items = items.Cast<object>()
        });

網絡提琴手

如果要序列化對象,為什么不將它們初始化為對象? 是否需要創建強類型?

    public static void Test()
    {
        var items = new List<object>() { new Class1 { Foo = "foo1", Bar1 = "Bar1" }, new Class2 { Foo = "foo1", Bar2 = "Bar2" } };
        int totalCount = 1;
        int min = 2;
        int max = 3;


        var root = new
        {
            totalCount,
            min,
            max,
            items,
        };

        var json = JsonSerializer.Serialize<object>(root, new JsonSerializerOptions { WriteIndented = true, });

        Console.WriteLine(json);
    }

如果您將項目創建為List<object> ,則無需更改或執行任何操作。 這可能是一種更簡潔的方法,而不是在創建對象時將它們中的每一個都轉換為對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM