2014-12-26 2 views
0

У меня есть класс, который уже используется в моих проектах с сериализацией xml. теперь я использую Web API, который использует сериализатор JSON.NET для сериализации и десериализации объектов.десериализация массива объектов 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 
} 

Я не получаю MyClass1 в массиве объектов MyClass's Items. Insteed это дает мне некоторый JObject в Items.

+3

Показать формат json и код десериализации! –

ответ

0

Если я понимаю, что вы хотите сделать, я думаю, вы можете сделать это с помощью пользовательского JsonConverter. Но сначала вам нужно каким-то образом ограничить тип элементов. Например, вы можете определить интерфейс IItems. Возможно, он не объявляет никаких методов, но то, что вы делаете с ним, применяет атрибут [JsonConverter(typeof(MyJsonConverter))] к элементам IItems. Затем он будет вызываться в любое время, когда элемент элементов сериализуется или десериализуется. Это требует немного работы, но это единственный способ выяснить, как сделать полиморфизм в JSON.net.

У нас есть встроенная поддержка полиморфизма в JSON.net, но для JSON требуются специальные ключи типа, которые, вероятно, у вашего ранее существовавшего формата отсутствуют.