【问题标题】:C# Binary Deserialization Error, class modificationC#二进制反序列化错误,类修改
【发布时间】:2015-03-06 19:51:25
【问题描述】:

(请原谅我无法有效地描述这种情况;我不是计算机科学家或软件工程师。我只是一个 GNC 工程师,最终会做很多编码)

我正在尝试加载导致加载错误的二进制序列化文件。我的程序中不再存在(我相信)导致此错误的类。有没有一种通用的方法可以“忽略”反序列化的那部分?

也许这个类比会有所帮助:我有一个描述如何制造自行车、汽车和飞机的文件。知道如何制造所有这些的人已经走了,但新人知道如何制造自行车和汽车。我想把那个文件给那个新人,让他给我造一辆自行车和一辆汽车,但他却因为不能造飞机而大发雷霆。我怎么能告诉这个人(称他为反序列化先生)忘记飞机,只为我制造我的汽车和自行车。

提前致谢,

(ObjectManager 发现了无效数量的修复。这通常表明格式化程序有问题)

【问题讨论】:

  • [NonSerialized] 属性是否可以忽略缺失的类?包含任何代码将有助于缩小可能性。

标签: c# serialization backwards-compatibility


【解决方案1】:

似乎需要实现ISerializable,并为DeserializeItem 方法提供自定义定义。示例:

public class GNCEngineer : ISerializable
{
    public Bike Bike { get; set; }
    public Car Car { get; set; }
    public Plane AirPlane { get; set; }

    public static void SerializeItem(string fileName, IFormatter formatter)
    { 
        // let serializer do their work 
    }

    public static void DeserializeItem(string fileName, IFormatter formatter)
    {
        // Ignore airplane and let rest work.
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 2016-07-27
    • 2011-06-08
    • 2015-07-13
    • 2014-01-04
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多