JSON.NET对象数组反序列化为已知类型类

时间:2014-12-26 16:42:08

标签: asp.net-web-api json.net asp.net-web-api2

我有一个已经在我的项目中使用xml序列化的类。现在我正在使用Web API,它使用JSON.NET序列化程序来序列化和反序列化对象。

[Serializable]
public class MyClass
{
    private object[] itemsField;


    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("MyClass1", typeof(MyClass1))]
    [System.Xml.Serialization.XmlElementAttribute("MyClass2", typeof(MyClass2))]
    public object[] Items
    {
        get
        {
            return this.itemsField;
        }
        set
        {
            this.itemsField = value;
        }
    }

}

[Serializable]
public class MyClass1
{
    //some properties
}

[Serializable]
public class MyClass2
{
    // some properties
}

我没有在MyClass的Items的对象数组中获取MyClass1。鉴于它在物品中给了我一些JObject。

1 个答案:

答案 0 :(得分:0)

如果我理解你想做什么,我认为你可以用自定义的JsonConverter来做。但您首先需要以某种方式限制项目的类型。例如,您可以定义接口IItems。也许它声明没有方法,但你用它做的是将[JsonConverter(typeof(MyJsonConverter))]属性应用于IItems。然后,只要Item的成员被序列化或反序列化,它就会被调用。这需要一些工作,但这是我在JSON.net中弄清楚如何进行多态的唯一方法。

呃,JSON.net中有内置的多态支持,但它需要特殊的&#34;类型&#34;存在于JSON中的密钥,您的预先存在的格式可能没有。