首页 新闻 会员 周边 捐助

System.Text.Json 如何序列化接口的实现

0
悬赏园豆:30 [已解决问题] 解决于 2025-06-05 10:38

在 System.Text.Json 序列化一个对象时,发现其中声明为接口的属性只序列化了接口中定义的属性,没有序列化接口实现中的属性,请问如何解决这个问题?

接口定义

public interface IHierarchicalCategory
{
    public int? ParentId { get; set; }
    IHierarchicalCategory? Parent { get; set; }
}

接口的实现定

public class BlogCategoryDto : IHierarchicalCategory
{
    public int CategoryId { get; set; }
    public int? ParentId { get; set; }
    public string Title { get; set; }
    public int ChildCount { get; set; }   
    public int? Order { get; set; }
    public IHierarchicalCategory? Parent { get; set; }
}

序列化的结果

{
  "parent": {
    "parentId": 2264940,
    "parent": {
      "parentId": 2264939,
      "parent": {
        "parentId": null,
        "parent": null
      }
    }
  },
  "categoryId": 2459008,
  "title": "test4-1",
  "childCount": 0,
  "parentId": 2264944,
  "order": null
}
dudu的主页 dudu | 高人七级 | 园豆:25263
提问于:2025-06-05 09:02
< >
分享
最佳答案
0

通过 JsonDerivedType attribute 解决了

[JsonDerivedType(typeof(BlogCategoryDto), nameof(BlogCategoryDto))]
[JsonDerivedType(typeof(TreeCategoryDto), nameof(TreeCategoryDto))]
public interface IHierarchicalCategory
{
    public int? ParentId { get; set; }
    IHierarchicalCategory? Parent { get; set; }
}

参考:

dudu | 高人七级 |园豆:25263 | 2025-06-05 10:38
其他回答(1)
0

try try JsonTypeInfoResolver?

czd890 | 园豆:14650 (专家六级) | 2025-06-05 10:43

目前只是很少地方涉及到,如果用的多,或者接口与实现不在同一个 csproject,就要动用 JsonTypeInfoResolver

支持(0) 反对(0) dudu | 园豆:25263 (高人七级) | 2025-06-05 18:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册