C# 序列化和反序列化对象集合
我正在尝试创建一个Rssfeed阅读器,它可以将播客的信息保存到一个JSON文件中,但是我在序列化和反序列化该文件时遇到了问题 我意识到关于这个主题还有其他的线索,但我无法理解如何将它应用到我的代码或其背后的推理中 因此,我有一段代码,如果文件不存在,则创建一个文件,并将JSON数据写入其中,如下所示:C# 序列化和反序列化对象集合,c#,json,serialization,json.net,json-deserialization,C#,Json,Serialization,Json.net,Json Deserialization,我正在尝试创建一个Rssfeed阅读器,它可以将播客的信息保存到一个JSON文件中,但是我在序列化和反序列化该文件时遇到了问题 我意识到关于这个主题还有其他的线索,但我无法理解如何将它应用到我的代码或其背后的推理中 因此,我有一段代码,如果文件不存在,则创建一个文件,并将JSON数据写入其中,如下所示: public void SaveFile(Podcast podcast) { try { JsonSerializer serializer = new Jso
public void SaveFile(Podcast podcast)
{
try
{
JsonSerializer serializer = new JsonSerializer();
if(!File.Exists(@"C: \Users\Kasper\Desktop\Projektuppgift\Projektuppgift - Delkurs2\Projektet\Projektet\bin\Debug\podcasts.json"))
{
string json = JsonConvert.SerializeObject( new { Podcast = podcast });
StreamWriter sw = File.CreateText(@"C:\Users\Kasper\Desktop\Projektuppgift\Projektuppgift-Delkurs2\Projektet\Projektet\bin\Debug\podcasts.json");
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, json);
}
}
else
{
var filepath = @"C:\Users\Kasper\Desktop\Projektuppgift\Projektuppgift-Delkurs2\Projektet\Projektet\bin\Debug\podcasts.json";
var jsonData = File.ReadAllText(filepath);
var podcasts = JsonConvert.DeserializeObject<List<Podcast>>(jsonData) ?? new List<Podcast>();
podcasts.Add(podcast);
jsonData = JsonConvert.SerializeObject(new {PodcastList = podcasts });
File.WriteAllText(filepath, jsonData);
}
}
catch (Exception ex)
{
Console.WriteLine("IO Exception ", ex.Message);
}
}
我仍在学习c,但可能是反序列化到一个播客列表中,当你序列化时,你正在序列化到一个对象类型。我仍在学习c,但可能是反序列化到一个播客列表中,当你序列化时,你正在序列化到一个对象类型。似乎有几个问题这里的问题:
- 当您第一次创建文件(在第一个分支中)时,您正在编写一个JSON对象,该对象包含一个属性
,该属性随后包含一个PodcastPodcast
- 当您尝试读取JSON文件时,您将整个JSON视为播客列表
- 将新播客添加到列表中后,您将JSON作为一个包含
属性的单个对象写入,该属性随后包含列表PodcastList
podcasts.json
文件,这样可以更容易地解释:
public static List<Podcast> ReadPodcastsFromFile(string filepath)
{
if (!File.Exists(filepath)) return new List<Podcast>();
string json = File.ReadAllText(filepath);
return JsonConvert.DeserializeObject<List<Podcast>>(json);
}
public static void WritePodcastsToFile(List<Podcast> podcasts, string filepath)
{
string json = JsonConvert.SerializeObject(podcasts);
// This will overwrite the file if it exists, or create a new one if it doesn't
File.WriteAllText(filepath, json);
}
注意,我还从SaveFile
中删除了异常处理。您应该将其移动到调用SaveFile
的任何位置,以便在引发异常时可以在该位置采取适当的操作,例如:
try
{
SaveFile(podcast);
}
catch (Exception ex)
{
// Show a message to the user indicating that the file did not save
}
这里似乎有几个问题:
- 当您第一次创建文件(在第一个分支中)时,您正在编写一个JSON对象,该对象包含一个属性
,该属性随后包含一个PodcastPodcast
- 当您尝试读取JSON文件时,您将整个JSON视为播客列表
- 将新播客添加到列表中后,您将JSON作为一个包含
属性的单个对象写入,该属性随后包含列表PodcastList
podcasts.json
文件,这样可以更容易地解释:
public static List<Podcast> ReadPodcastsFromFile(string filepath)
{
if (!File.Exists(filepath)) return new List<Podcast>();
string json = File.ReadAllText(filepath);
return JsonConvert.DeserializeObject<List<Podcast>>(json);
}
public static void WritePodcastsToFile(List<Podcast> podcasts, string filepath)
{
string json = JsonConvert.SerializeObject(podcasts);
// This will overwrite the file if it exists, or create a new one if it doesn't
File.WriteAllText(filepath, json);
}
注意,我还从SaveFile
中删除了异常处理。您应该将其移动到调用SaveFile
的任何位置,以便在引发异常时可以在该位置采取适当的操作,例如:
try
{
SaveFile(podcast);
}
catch (Exception ex)
{
// Show a message to the user indicating that the file did not save
}
new{Podcast=Podcast}
--您可能想在那里创建一个新的列表
,而不是一个带有单个Podcast
属性的新匿名对象。new{Podcast=Podcast}
--您可能想在那里创建一个新的列表
,不是一个新的匿名对象,只有一个Podcast
属性。然后如何序列化到Podcast列表?或者你会用另一种方式序列化它吗?我不知道我使用json serialise的次数。我通常使用它们的属性/标记我的数据,这样有助于映射,尝试查看json中的attrinbutes,然后如何序列化到播客列表?或者你会用另一种方式序列化它吗?我不知道我使用json serialise的时间,我通常使用它们的属性/标记我的数据,这样有助于映射,请尝试查看json中的attrinbutes