小编Nic*_*ngo的帖子

将 Json 对象反序列化为没有 typeNameHandling 的多态 C# 对象

我的问题是我想将一个 json 对象反序列化为一个 C# 对象,但诀窍是 C# 对象包含 List<抽象类> 并且这个抽象类是另外 10 个类的超类。

public sealed class SearchAPIResult
{
    public string Status;

    public SearchAPIQuery Query;

    public SearchResults Result;

    public SearchAPIResult()
    {

    }

    public SearchAPIResult(string status)
    {
        Status = status;
    }
}
Run Code Online (Sandbox Code Playgroud)

并且SearchAPIResult是:

public sealed class SearchResults
{
    public string TextAnswer;

    public List<APIResultWidget> Items;

    public SearchResults()
    {
        Items = new List<APIResultWidget>();
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的对象APIResultWidget是一个抽象类,它继承了大约 10 个类。

问题是 JSON 对象没有自动(如 JSON.NET 中的 typeNameHandling)来引导反序列化器转换到 10 个派生类中的哪个对象。相反,对象由两个字段标记:Type 和 SubType... 如下所示

{
    "Status": "OK", …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism json json.net servicestack

5
推荐指数
1
解决办法
3558
查看次数

标签 统计

c# ×1

json ×1

json.net ×1

polymorphism ×1

servicestack ×1