c# - 使用 BinaryFormatter 将自动实现的属性更改为正常和反序列化

标签 c# .net serialization automatic-properties

我有一个对象,其属性实现如下

public String Bla {get;set;} 

将实现更改为类似

private String _bla;

public String Bla
{
    get { return _bla; }
    set { _bla = value; } 
} 

反序列化时,此属性为空。

我有很多来自旧实现的序列化数据,想用新实现加载它们

有什么方法可以更改实现以与旧的二进制文件兼容?

编辑:

有些人可能会遇到同样的问题,所以这是我的 hackish 解决方案:

自动生成的字段的命名约定是无效的 c# 代码:

[CompilerGenerated]
private string <MyField>k__BackingField;

[CompilerGenerated]
public void set_MyField(string value)
{
    this.<MyField>k__BackingField = value;
}

[CompilerGenerated]
public string get_MyField()
{
    return this.<MyField>k__BackingField;
}

对我来说,快速而肮脏的解决方法是创建一个名为 xMyFieldxK__BackingField 的私有(private)支持字段。在源代码中,

并通过替换所有出现的 <MyField> 来修补序列化的二进制数据与 xMyFieldx反序列化前

最佳答案

尝试实现ISerializable

    [SecurityCritical]
    public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        if (info == null)
            throw new ArgumentNullException("info");

        info.AddValue("name of compiler generated field", _bla);
    }

关于c# - 使用 BinaryFormatter 将自动实现的属性更改为正常和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725025/

相关文章:

c# - 如何在asp.net core 2.2中注册IFileProvider进行依赖注入(inject)?

c# - Visual Studio Xamarin 模板缺少程序集引用

c# - 如何获取之前连接的 USB 设备的时间戳?

c# - 采用 WF 的 Web 应用程序的最佳设计是什么?

.net - 在 VS2010 数据库项目中部署时设置 DefaultDataPath 和 DefaultLogPath

.net - 我如何在我的 .NET 应用程序中使用 W3C 标记验证器 API?

.net - 了解 .NET GC 和 OutOfMemory 异常

algorithm - 如何在 double-double 和 decimal 字符串之间进行转换?

java - 为什么从抽象 Serialized 继承时会收到 InvalidClassException 'no valid constructor'?

java - 使用 writeValueAsString 序列化对象后 Jackson 反序列化失败