提问人:Nin 提问时间:8/9/2023 更新时间:8/9/2023 访问量:58
反序列化 appsettings.json 时多态反序列化不起作用
Polymorphic deserialization not working when deserializing appsettings.json
问:
我有一个基类 Target 和两个派生类 TargetA 和 TargetB。从 appsettings.json 开始,我想反序列化为派生对象的类型(在运行时可以是 TargetA 或 TargetB)。我正在使用 Dot Net Core 7.0 中提供的多态反序列化,并尝试从 Web API 项目反序列化。
'''
using System.Text.Json.Serialization;
[JsonDerivedType(derivedType:typeof(TargetA), typeDiscriminator: "A")]
[JsonDerivedType(derivedType: typeof(TargetB), typeDiscriminator: "B")]
public class Target
{
public string Prop1{get;set;}
}
public class TargetA:Target
{
public string PropA{get;set;}
}
public class TargetB:Target
{
public string PropB{get;set;}
}
appsettings.json
{
"TestTarget":{
"$type":"A",
"PropA":"valueA",
"Prop1":"value1"
}
public class Program.cs
{
....
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var targetObj = configuration
.GetSection("TestTarget")
.Get<Target>();
}
'''
运行时,targetObj 仅具有基类“Target”的属性,而没有派生类“TargetA”的属性。
为了验证我是否正确实现了 JsonDerivedAttribute,我使用了以下代码来选择正确的“targetA”类型。
'''
var targetObj2 = new TargetA()
{
PropA = "valueA",
Prop1 = "value1"
}
var ser = JsonSerializer.Serialize<Target>(src);
var deser = JsonSerializer.Deserialize<Target>(ser);
'''
我不明白使用反序列化时缺少什么 我必须在其他地方明确提及吗?"configuration.GetSection("TestTarget").Get<Target>()".
答: 暂无答案
评论