.net 具有层次结构和继承的序列化System.Text.Json

t1rydlwq  于 2023-03-04  发布在  .NET
关注(0)|答案(1)|浏览(187)

您能解释为什么“ILevel2”的序列化不包括“ILevel1”属性吗?
Serialize(level2),我希望有{"Scrore":10,"Name":"Benjamin","City":"Lille"}
如何拥有它?注意我使用.net JSON序列化器:using System.Text.Json.JsonSerializer;

var obj = new FullClass() { Name = "Benjamin", Scrore = 10, City = "Lille"};

ILevel1 level1 = obj as ILevel1;
ILevel2 level2 = obj as ILevel2;

Console.WriteLine(Serialize(obj)); //==>  {"Scrore":10,"Name":"Benjamin","City":"Lille"}
Console.WriteLine(Serialize(level1)); //==> {"Name":"Benjamin","City":"Lille"}
Console.WriteLine(Serialize(level2)); //==> {"Scrore":10}

public interface ILevel1
{
    string Name { get; set; }
    string City { get; set; }
}

public interface ILevel2 : ILevel1
{
    int Scrore { get; set; }
}

public class FullClass : ILevel2
{
    public int Scrore { get; set; }

    public string Name { get; set; }

    public string City { get; set; }
}
iszxjhcz

iszxjhcz1#

当你把level2转换成FullClass时,它可以工作。我认为这与序列化器不能处理从接口继承的值有关。请参见this github issue。
我看到github问题中提到的变化在2022年11月被合并到了主要的dotnet分支中。据我所知,这些变化将在.NET 8中发布。
现在你应该考虑将你的接口转换为Fullclass对象,或者你可以使用newtonsoft json序列化器,它应该能够正确地处理这个问题

相关问题