【问题标题】:C# .Net Deserialization $type Not WorkingC# .Net 反序列化 $type 不工作
【发布时间】: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 属性来帮助反序列化器实例化本文标题中所述的子类。

【问题讨论】:

标签: c# .net json serialization unity3d


【解决方案1】:

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

$type:"RTMoviePageWithSlides, Assembly-CSharp"

$type:"RTCharacterPage, Assembly-CSharp"

【讨论】:

    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2016-04-11
    • 2022-12-14
    • 1970-01-01
    • 2015-09-20
    相关资源
    最近更新 更多