【发布时间】:2020-12-09 16:55:16
【问题描述】:
我创建了一个 Car 类,我用它来存储 Cars 的预设序列化版本以及它们所有的各种属性以及你有什么。
随着我的程序的进行,我意识到如果我添加或删除 Car 的属性,以前的每个序列化文件现在都无法读取。可以想象,这是一个问题。
如何在不使之前的所有文件失效的情况下更新我的课程?
-- 点击率
更新:我添加了我正在做的代码示例 如果我添加/删除属性并尝试反序列化文件,就会出现问题。
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
using System;
namespace MyCars
{
[Serializable]
public class Car
{
public string Name { get; set; }
public double TopSpeed { get; set; }
public Car(string name, double topspeed)
{
Name = name;
TopSpeed = topspeed;
}
}
public static class Serializer
{
public static bool LoadCar(string filePath, out Car car)
{
Stream TestFileStream = File.OpenRead(filePath);
BinaryFormatter serializer = new BinaryFormatter();
try
{
car = (Car)serializer.Deserialize(TestFileStream);
}
catch (Exception ex)
{
Console.WriteLine("Could not deserialize");
TestFileStream.Close();
car = null;
return false;
}
return true;
}
public static bool SaveCar(string filePath, Car car)
{
Stream TestFileStream = File.Create(filePath);
BinaryFormatter serializer = new BinaryFormatter();
serializer.Serialize(TestFileStream, car);
TestFileStream.Close();
return true;
}
}
}
【问题讨论】:
-
那么不要使用二进制序列化?
-
你是如何反序列化的?
-
请发布您的代码
-
使用 json 序列化并忽略不存在的属性
-
我必须为此特定目的使用二进制序列化。我不能使用 JSON。我只是使用内置的 [Serializable] 属性。我将发布一个代码示例,这似乎没有必要,因为它对我来说似乎纯粹是理论上的,抱歉。
标签: c# .net serialization binaryformatter