2014-12-26 3 views
0

XML 직렬화를 사용하여 이미 내 프로젝트에서 사용중인 클래스가 있습니다. 이제 JSON.NET serializer를 사용하여 객체를 serialize하고 deserialize하는 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의 항목 배열에 MyClass1이 표시되지 않습니다. 그것이 JObject를 Item에 제공하고 있습니다.

+3

json 및 비 직렬화 코드의 형식을 표시하십시오! –

답변

0

내가하고 싶은 것을 이해한다면 사용자 정의 JsonConverter로 처리 할 수 ​​있다고 생각합니다. 하지만 먼저 항목의 유형을 어떤 식 으로든 제한해야합니다. 예를 들어 인터페이스 IItems를 정의 할 수 있습니다. 어쩌면 그것은 아무런 메쏘드도 선언하지 않을 수도 있지만, 여러분이 그것으로 무엇을하는지는 [JsonConverter(typeof(MyJsonConverter))] 속성을 IItems에 적용하는 것입니다. 그런 다음 Items의 멤버가 serialize되거나 deserialized 될 때마다 호출됩니다. 이것은 약간의 작업을 필요로하지만 JSON.net에서 다형성을 수행하는 방법을 알아 낸 유일한 방법입니다.

어, JSON.net에는 다형성 지원 기능이 내장되어 있지만 기존 형식에는없는 특수한 "유형"키가 JSON에 있어야합니다.

관련 문제