如何序列化列表中所有继承自同一抽象类的多个不同类

问题描述 投票:0回答:1

在 ASP.NET Core 8 Web API 中,我具有以下结构:

public abstract class BaseClass
{
}

public class A : BaseClass 
{
    [JsonPropertyName("PropA")]
    public int PropA { get; set; }
}

public class B : BaseClass 
{
    [JsonPropertyName("PropB")]
    public int PropB { get; set; }
}

public class Row 
{
    [JsonPropertyName("cells")]
    public List<BaseClass> Cells { get; set; }
}

public class Table 
{    
    [JsonPropertyName("rows")]
    public List<Row> Rows { get; set; }
    [JsonPropertyName("pageNumber")]
    public int PageNumber { get; set; }
    [JsonPropertyName("pageSize")]
    public int PageSize { get; set; }
    [JsonPropertyName("totalAmountRecords")]
    public int TotalAmountRecords { get; set; }
    [JsonPropertyName("totalAmountPages")]
    public int TotalAmountPages { get; set; }
    [JsonPropertyName("recordOffset")]
    public int RecordOffset { get; set; }
}

此数据结构需要能够在同一个列表中存储多个类(具有不同属性),并序列化为 JSON 以返回给客户端。

我返回

Ok{tableInstance}
,我得到了这个:

{"rows":{],"pageNumber":0,"pageSize":20,"totalAmountRecords":100,"totalAmountPages":5,"recordOffset":0}

但是由于某种原因,行在被填满时是空的,因为

pageSize=rows.Count

我实现了一个自定义序列化器,但无法使其语法明智地工作。我也找不到任何类似的问题。

c# json serialization asp.net-core-webapi abstract-class
1个回答
0
投票

您需要告诉

System.Text.Json
序列化器有关派生类型的信息

[JsonDerivedType (typeof (A))]
[JsonDerivedType (typeof (B))]
public abstract class BaseClass {

}

如果您的派生类型位于其他程序集中,因此您无法使用

JsonDerivedType
属性,则必须设置自定义合同解析器。

© www.soinside.com 2019 - 2024. All rights reserved.