事实证明,尽管我做出了努力,是的,在早期版本之一中,数据格式发生了重大变化。这只会影响ushort
数据,在处理过程中一度忽略了这些数据。这是令人遗憾的,但好消息是没有数据丢失- 访问起来有点不方便(目前它基本上是通过字符串写入的)。
这是我建议的解决方法;对于像这样的成员:
[ProtoBuf.ProtoMember(1)]
public ushort[] Data {get;set;}
将其替换为:
[ProtoBuf.ProtoMember(1)]
private string[] LegacyData {get;set;}
private bool LegacyDataSpecified { get { return false; } set { } }
/* where 42 is just an unused new field number */
[ProtoBuf.ProtoMember(42, Options = MemberSerializationOptions.Packed)]
public ushort[] Data { get; set; }
[ProtoBuf.ProtoAfterDeserialization]
private void SerializationCallback()
{
if (LegacyData != null && LegacyData.Length > 0)
{
ushort[] parsed = Array.ConvertAll<string, ushort>(
LegacyData, ushort.Parse);
if (Data != null && Data.Length > 0)
{
int oldLen = parsed.Length;
Array.Resize(ref parsed, parsed.Length + Data.Length);
Array.Copy(Data, 0, parsed, oldLen, Data.Length);
}
Data = parsed;
}
LegacyData = null;
}
这会将旧式数据导入并在序列化LegacyData
期间(之后)将其合并,或者从. 更快、更小,并支持新旧数据。Data