gpt4 book ai didi

c# - 使用 protobuf-net 反序列化时数组不匹配

转载 作者:行者123 更新时间:2023-12-01 18:48:17 25 4
gpt4 key购买 nike

我是 protobuf-net 的初学者,所以这可能只是一些愚蠢的初学者错误。但我找不到这有什么问题:

我有一个要序列化到磁盘的类,定义如下:

[ProtoContract]
public class SerializableFactors
{
[ProtoMember(1)]
public double?[] CaF {get;set;}

[ProtoMember(2)]
public byte?[] CoF { get; set; }

}

和一个这样定义的测试:

        if (File.Exists("factors.bin"))
{
using (FileStream file = File.OpenRead("factors.bin"))
{
_factors = Serializer.Deserialize<SerializableFactors>(file);
}
}
else
{
_factors = new SerializableFactors();
_factors.CaF = new double?[24];
_factors.CaF[8] = 7.5;
_factors.CaF[12] = 1;
_factors.CaF[18] = 1.5;
_factors.CoF = new byte?[24];
_factors.CoF[8] = 15;
_factors.CoF[12] = 45;
_factors.CoF[18] = 25;
using (FileStream file = File.Create("factors.bin"))
{
Serializer.Serialize(file, _factors);
}
}

所以基本上,如果文件尚不存在,我会创建一个具有默认值的对象并将其序列化到磁盘。如果文件存在,我会将其加载到内存中。

但是我加载文件的结果不是我在保存到磁盘之前创建的结果。我创建了长度为 24 的数组,其值位于插槽 8、12 和 18 中。但是反序列化的对象具有长度为 3 的数组,其中保存了我的值。

我在这里犯了什么错误?提前致谢!

最佳答案

您必须将 RuntimeTypeModel 设置为支持 null

请参阅以下帖子: How can I persist an array of a nullable value in Protobuf-Net?

// configure the model; SupportNull is not currently available
// on the attributes, so need to tweak the model a little
RuntimeTypeModel.Default.Add(typeof(SerializableFactors), true)[1].SupportNull = true;

if (File.Exists("factors.bin"))
{
using (FileStream file = File.OpenRead("factors.bin"))
{
_factors = Serializer.Deserialize<SerializableFactors>(file);
}
}
else
{
_factors = new SerializableFactors();
_factors.CaF = new double?[24];
_factors.CaF[8] = 7.5;
_factors.CaF[12] = 1;
_factors.CaF[18] = 1.5;
_factors.CoF = new byte?[24];
_factors.CoF[8] = 15;
_factors.CoF[12] = 45;
_factors.CoF[18] = 25;
using (FileStream file = File.Create("factors.bin"))
{
Serializer.Serialize(file, _factors);
}
}

关于c# - 使用 protobuf-net 反序列化时数组不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23419747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com