Dr.*_*mmi 5 .net c# serialization automatic-properties
我有一个实现像属性的对象
public String Bla {get;set;}
Run Code Online (Sandbox Code Playgroud)
将实现更改为类似之后
private String _bla;
public String Bla
{
get { return _bla; }
set { _bla = value; }
}
Run Code Online (Sandbox Code Playgroud)
在反序列化中,这个属性是空的.
我有来自旧实现的大量序列化数据,并希望使用新实现加载它们
有没有办法,改变实现与旧的二进制文件兼容?
编辑:
有些人可能遇到同样的问题,所以这是我的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;
}
Run Code Online (Sandbox Code Playgroud)
对我来说快速而肮脏的修复是创建一个xMyFieldxK__BackingField在源代码中调用的私有支持字段,
并通过更换出现的所有修补系列化binarydata <MyField>与xMyFieldxdeserialisation前
尝试实施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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |