2016-09-22 40 views
0

我试图反序列化使用他们$类型属性的json。不过,我得到一个错误,指出“在JSON指定类型没有解决。我不知道我在做什么错。任何帮助是极大的赞赏。

我的JSON

{ 
movies: 
[ 
    { 
     $type:"RTMoviePageWithSlides", 
     title:"Reservoir Dogs", 
     slides:[ 
      {$type:"RTCharacterPage", title:"Mr. Orange",  img:""}, 
      {$type:"RTCharacterPage", title:"Mr. Blonde",  img:""}, 
      {$type:"RTCharacterPage", title:"Mr. White",  img:""}, 
      {$type:"RTCharacterPage", title:"Mr. Pink",   img:""}, 
      {$type:"RTCharacterPage", title:"Nice Guy Eddie", img:""}, 
     ] 
    } 
    { 
     $type:"RTMoviePageWithSubpages", 
     title:"Jackie Brown", 
     pages:[ 
      {$type:"RTActorPage", title:"Pam Gier",    other_movies:[]}, 
      {$type:"RTActorPage", title:"Samuel L. Jackson", other_movies:[]}, 
      {$type:"RTActorPage", title:"Robert Forester",  other_movies:[]} 
     ] 
    } 
] 
} 

我的课表

using System.Collections; 
using System.Collections.Generic; 

public class RTMovieData { 
    public List<RTMoviePage> movies;  
} 

public class RTMoviePage { 
    public string title; 
} 

public class RTMoviePageWithSlides : RTMoviePage{ 
    public List<RTMoviePage> slides = new List<RTSlidePageData>{}; 
} 

public class RTMoviePageWithSubpages : RTMoviePage{ 
    public List<RTMoviePage> pages = new List<RTPageData>{}; 
} 

public class RTCharacterPage : RTMoviePage 
{ 
    public string img; 
} 

public class RTActorPage : RTMoviePage 
{ 
    public List<string>other_movies; 
} 

反串行化代码

var settings = new JsonSerializerSettings(); 
    settings.TypeNameHandling = TypeNameHandling.Auto; 

    RTMovieData data = JsonConvert.DeserializeObject<RTMovieData>(jsonString, settings); 

@Programmer提到邮报“的反序列化在Unity C#中使用MiniJSON的JSON作为这篇文章的副本。但是,这两个职位根本没有关系。另一篇文章描述了一位正在使用不同JSON解串器的用户,并且在获取数组反序列化时遇到问题。我的问题是特定于使用$ type属性来帮助反序列化器实例化这篇文章的标题中陈述的子类。

+1

的([在Unity C#中使用MiniJSON JSON的反序列化]可能的复制http://stackoverflow.com/questions/36239705/deserialization-of-json-using-minijson- in-unity-c-sharp) – Programmer

+0

如果在$ type属性中包含完整的'namespace.classname',会发生什么? http://stackoverflow.com/a/28125077/424129 –

+0

我没有使用名称空间。加一个没有帮助 – znerolnoht

回答

0

解决方案:在我的JSON中,我需要将“Assembly-CSharp”添加到$ type属性的值中。

$type:"RTMoviePageWithSlides, Assembly-CSharp" 

$type:"RTCharacterPage, Assembly-CSharp"