我已经找了一个问题的解决方案已经有一段时间了,并且看到了一些我认为可能会解决的想法,但我还是无法将它们整合在一起。值得一提的是,我对C#很新。
我有一个库,它定义了一堆模型类,用于将JSON数据反序列化。其中一个模型Application
具有属性public List<ApplicationField> Fields { get; set; }
我已经能够创建一个我称之为MyApplication
的应用程序子类。由于我有MyApplication
,我还希望MyApplicationField
扩展ApplicationField
我尝试了一些方法,下面是我认为最有可能成功的方法(不幸的是它没有):
public class MyApplication : Application
{
new public List<MyApplicationField> Fields { get; set; }
}
然后通过代码对Json进行反序列化:
JsonConvert.DeserializeObject<MyApplication>
我希望JSON Fields
属性的值将映射到我在子类List<MyApplicationField>
中定义的类型MyApplication
的Fields属性中。但是它被反序列化为基类“Fields
属性(类型为List<ApplicationField>
)
注意:我无法更改基类。
是否有可能实现我正在寻找的行为?
答案 0 :(得分:1)
适用于我,作为默认行为。你能提供一个example来证明这个问题吗?
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; }
}