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

2023-11-21

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

public String Bla {get;set;} 

将实现更改为类似的内容后

private String _bla;

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

反序列化时,该属性变为空。

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

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

EDIT:

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

自动生成的字段具有无效的 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在源中,

并通过替换所有出现的情况来修补序列化的二进制数据<MyField> with 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);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 BinaryFormatter 将自动实现的属性更改为正常和反序列化 的相关文章

随机推荐