.net core System.Text.Json.JsonSerializer不';t从派生类序列化属性

.net core System.Text.Json.JsonSerializer不';t从派生类序列化属性,.net-core,.net Core,我无法让System.Text.Json.JsonSerializer序列化派生类的属性。Newtonsoft在做这项工作时没有任何问题 namespace TestJson { 班级计划 { 静态void Main(字符串[]参数) { var myClass=new NewClass2 { Value1=“qsd”, ShouldBeSerialized=“为什么我没有序列化?” }; //正如所料,正在获取{“ShouldBeSerialized”:“为什么没有序列化?”,“Value1”

我无法让System.Text.Json.JsonSerializer序列化派生类的属性。Newtonsoft在做这项工作时没有任何问题

namespace TestJson
{
班级计划
{
静态void Main(字符串[]参数)
{
var myClass=new NewClass2
{
Value1=“qsd”,
ShouldBeSerialized=“为什么我没有序列化?”
};
//正如所料,正在获取{“ShouldBeSerialized”:“为什么没有序列化?”,“Value1”:“qsd”}
var textJsonSerializedFromTop=System.Text.Json.JsonSerializer.Serialize(myClass);
//应为{“ShouldBeSerialized”:“为什么不序列化?”,“Value1”:“qsd”}
//但是得到{“Value1”:“qsd”}
var textJsonSerializedFromBase=System.Text.Json.JsonSerializer.Serialize(myClass);
//正如所料,正在获取{“ShouldBeSerialized”:“为什么没有序列化?”,“Value1”:“qsd”}
var newtonSoftSerializedFromBase=Newtonsoft.Json.JsonConvert.SerializeObject(myClass);
}
}
公共类类库
{
公共字符串值1{get;set;}
}
公共类NewClass2:ClassBase
{
公共字符串应序列化{get;set;}
}
}
在上一个显示实际问题的示例中,解决方案是直截了当的,但在下一个示例中,我不知道如何通过不使用newtonsoft进行管理:

namespace TestJson
{
班级计划
{
静态void Main(字符串[]参数)
{
变量系列化=
新[]{
新类库
{
Value1=“aze”
},
新类别2
{
Value1=“qsd”,
ShouldBeSerialized=“为什么我没有序列化?”
}
};
var textJsonSerialized=System.Text.Json.JsonSerializer.Serialize(toSerialize);
//应为[{“Value1”:“aze”},{“ShouldBeSerialized”:“为什么不序列化?”,“Value1”:“qsd”}]
//但是得到[{“Value1”:“aze”},{“Value1”:“qsd”}]
Console.WriteLine(textJsonSerialized);
var newtonSoftSerialized=Newtonsoft.Json.JsonConvert.SerializeObject(toSerialize);
//正如预期的那样,获得[{“Value1”:“aze”},{“ShouldBeSerialized”:“为什么没有序列化?”,“Value1”:“qsd”}]
Console.WriteLine(newtonSoftSerialized);
}
}
公共类类库
{
公共字符串值1{get;set;}
}
公共类NewClass2:ClassBase
{
公共字符串应序列化{get;set;}
}
}

使用非泛型版本并传入实际类型,
.Serialize(toSerialize,toSerialize.GetType())
@LasseV.Karlsen这并不是一个真正实用的解决方案。例如,如果要序列化所有继承相同接口的不同类型的列表。仅包括接口属性。或者更糟糕的是,如果接口本身继承了接口,那么这些属性将不包括在内。我完全同意,但不幸的是,我认为您现在没有任何其他选择。内置json(反)序列化程序现在有很多缺点,不幸的是,你要么不得不接受它们,要么停止使用内置代码,转而使用json.net。让我重新表述一下,如果你有两个选项,其中一个是不可能的,那么不管另一个有多不切实际,这就是你剩下的全部。不过,这里有第三种选择,即不使用内置的json类。也许你会失去一些速度,但你会获得理智和可用性。