Json 反序列化为子类的 "new" 属性



我已经寻找解决问题的方法已经有一段时间了,并看到了一些我认为可能会奏效的想法,但我无法将它们放在一起。值得一提的是,我对 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; }
}

相关内容

  • 没有找到相关文章

最新更新