我已经寻找解决问题的方法已经有一段时间了,并看到了一些我认为可能会奏效的想法,但我无法将它们放在一起。值得一提的是,我对 C# 很陌生。
我有一个库,它定义了一堆模型类,用于将 JSON 数据反序列化为。这些模型之一是具有以下属性public List<ApplicationField> Fields { get; set; }
的Application
我已经能够创建一个我称之为MyApplication
的应用程序子类。既然我有MyApplication
我也希望有MyApplicationField
扩展ApplicationField
我已经尝试了几种方法,以下是我认为最有可能成功的方法(不幸的是它没有):
public class MyApplication : Application
{
new public List<MyApplicationField> Fields { get; set; }
}
然后由代码反序列化 Json:
JsonConvert.DeserializeObject<MyApplication>
我希望 JSON Fields
属性的值将映射到我在子类 MyApplication
中定义的类型 List<MyApplicationField>
的 Fields 属性中。但是,它被反序列化为基类的Fields
属性(类型为List<ApplicationField>
)
注意:我无法更改基类。
是否有可能实现我正在寻找的行为?
作为默认行为,对我有用。您能否提供一个演示该问题的示例?
void Main()
{
{
var jsonData = @"{""Fields"":[{""MyProp"":""my prop value"",""Prop1"":""prop 1 value""}]}";
var myApp = JsonConvert.DeserializeObject<MyApplication>(jsonData);
Console.WriteLine(myApp.Fields[0].MyProp); // "my prop value"
Console.WriteLine(((Application)myApp).Fields == null); // "True"
}
{
// just to make sure it's not being clever because "MyProp" is specified
// we'll try this also, which could be deserialized as an Application
var jsonData = @"{""Fields"":[{""Prop1"":""prop 1 value""}]}";
var myApp = JsonConvert.DeserializeObject<MyApplication>(jsonData);
Console.WriteLine(myApp.Fields[0].Prop1); // "prop 1 value"
Console.WriteLine(((Application)myApp).Fields == null); // "True"
}
}
public class MyApplication : Application
{
public new List<MyApplicationField> Fields { get; set; }
}
public class Application
{
public List<ApplicationField> Fields { get; set; }
}
public class MyApplicationField : ApplicationField
{
public string MyProp { get; set; }
}
public class ApplicationField
{
public string Prop1 { get; set; }
}