为什么在使用 Json.Net 解析时出现“转换值时出错”异常

本文关键字:转换 出错 异常 为什么 Json Net | 更新日期: 2023-09-27 18:34:32

>我正在尝试解析 .json 文件中的数据,并将它们放入名为"Track"的类列表中

该类如下所示:

public class Track
{
        public string Artist { get; set; }
        public string Album { get; set; }
        public string Title { get; set; }
        public int TrackNumber { get; set; }
        public string Filepath { get; set; }
        public int SongLength { get; set; }
        public Color RGB { get; set; }
}

我的代码看起来像这样:

private void Load()
    {
        using (StreamReader r = new StreamReader("C:'Users'Swagger'Desktop'Test'MusicCacheP.json"))
        {
            string json = r.ReadToEnd();
            List<Track> items = JsonConvert.DeserializeObject<List<Track>>(json);
            MSG(items.Count.ToString());
            //MSG is just a function which gives me a messagebox. I'm too lazy to write the full messagebox.show.. ;)
        }
    }

我不知道这是否重要,但这里有一些 json 代码:

{"Artist":"Dirty South","Album":"Until the End","Title":"Until the End (Michael Brun Mix) [feat. Joe Gil]","TrackNumber":0,"Filepath":"''''DAVIDIOSO''Users''hasht_000''Music''Dirty South - Until the End (Michael Brun Mix) [feat. Joe Gil].mp3","SongLength":21,"RGB":""}

我并没有真正使用 Json 来完全了解它是如何工作的。我是那种喜欢边做边学的人。但是,如果您有一些关于 C# 中的 json 的好页面要读,我很乐意阅读它:)

编辑:

我快疯了!我不知道为什么我会出现这个异常。

我只收到文件路径的例外。

疯狂的是,我有另一个文件,其中包含所有文件路径,我也使用 json 读取。效果很好。

一个"贫民窟"的解决方案是读取仅包含文件路径的文件并使用它来填充我的 Track 列表?但是解决这个问题会很好。任何帮助真的非常感谢!:)

为什么在使用 Json.Net 解析时出现“转换值时出错”异常

您已将RGB定义为类中的Color,并且json中的内容指向字符串类型。可以将类修改为具有字符串类型RGB,然后将该字符串值转换为Color

public class RootObject
{
    public string Artist { get; set; }
    public string Album { get; set; }
    public string Title { get; set; }
    public int TrackNumber { get; set; }
    public string Filepath { get; set; }
    public int SongLength { get; set; }
    public string RGB { get; set; } //here
}

要从 json 自动创建类模板,请使用 http://json2csharp.com/

> 所以,我感到很尴尬,不得不自己回答这个问题。

我忘了做的,是从文件阅读器中删除一个字母"p"。所以它得到的文件只有音乐的文件路径,而不是艺术家、曲目名称、专辑名称等......

简直不敢相信我直到现在才看到它!

自从我第一次遇到这个问题以来,已经有 2-3 天了,这是一个如此简单的解决方案。