【发布时间】:2016-09-22 15:15:49
【问题描述】:
我正在尝试使用它们的 $type 属性反序列化 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 属性来帮助反序列化器实例化本文标题中所述的子类。
【问题讨论】:
-
如果在
$type属性中包含完整的namespace.classname会发生什么? stackoverflow.com/a/28125077/424129 -
我没有使用命名空间。添加一个没有帮助
标签: c# .net json serialization unity3d