您能解释为什么“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; }
}
1条答案
按热度按时间iszxjhcz1#
当你把
level2
转换成FullClass
时,它可以工作。我认为这与序列化器不能处理从接口继承的值有关。请参见this github issue。我看到github问题中提到的变化在2022年11月被合并到了主要的dotnet分支中。据我所知,这些变化将在.NET 8中发布。
现在你应该考虑将你的接口转换为Fullclass对象,或者你可以使用newtonsoft json序列化器,它应该能够正确地处理这个问题