0

很长一段时间以来,我一直在寻找解决我的问题的方法,并看到了一些我认为可能可行的想法,但我无法将它们放在一起。值得一提的是,我对 C# 还是很陌生。

我有一个库,它定义了一堆模型类,用于将 JSON 数据反序列化为。这些模型之一是Application具有属性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>

我希望 JSONFields属性的值将映射到List<MyApplicationField>我在子类中定义的类型的 Fields 属性MyApplication。但是它被反序列化为基类的Fields属性(类型为List<ApplicationField>

注意:我无法更改基类。

是否有可能实现我正在寻找的行为?

4

1 回答 1

1

为我工作,作为默认行为。你能提供一个例子来说明这个问题吗?

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; }
}
于 2013-11-02T14:06:47.667 回答