在 .NET 8 Core 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
。
我实现了一个自定义序列化器,但无法使其语法明智地工作。我也找不到任何类似的问题。
System.Text.Json
序列化器有关派生类型的信息:
[JsonDerivedType (typeof (A))]
[JsonDerivedType (typeof (B))]
public abstract class BaseClass {
}
如果您的派生类型位于其他程序集中,因此您无法使用
JsonDerivedType
属性,则必须设置自定义合同解析器。