反序列化 Protobuf-net 有问题。我序列化了一个 List<>
但是当我反序列化 List<>
返回的与第一个不相同。缺少数据。
我不明白为什么。
我初始化我的 List<>
在点击率
public ctr()
{
DateTime date = new DateTime(2012 , 12, 03); ;
LkVisiteurIdDTO visitid= new LkVisiteurIdDTO(10, 11, 12);
PurgeDateTimeDTO datetime= new PurgeDateTimeDTO(date, true);
ContractProtoBuf proto = new ContractProtoBuf();
for (int i = 0; i < 5; i++)
{
proto.m_Index = i + 1;
proto.m_TechnicalKey = "m_TechnicalKey" + i;
proto.m_LogicalKey = visitid;
proto.m_PurgeTime = datetime;
protoContractList.Add(proto);
}
}
public byte[] serialization()
{
MemoryStream ms = new MemoryStream();
try
{
Serializer.Serialize(ms, protoContractList);
arr = ms.ToArray();
return arr;
}
catch
{
Console.WriteLine("La sérialisation protobuf a échoué");
return null;
}
finally
{
ms.Close();
}
}
public List<ContractProtoBuf> deserialization()
{
MemoryStream ms = new MemoryStream(arr,false);
try
{
listeRetour = Serializer.Deserialize<List<ContractProtoBuf>>(ms);
return (listeRetour);
}
catch (Exception e)
{
Console.WriteLine("La désérialisation protobuf a échoué");
return null;
}
finally
{
ms.Close();
}
}
所以我的问题是如何获得相同的结果?
这是我的结构
[ProtoContract]
public struct ContractProtoBuf
{
[ProtoMember(1)]
public int m_Index;
[ProtoMember(2)]
public string m_TechnicalKey;
[ProtoMember(3)]
public LkVisiteurIdDTO m_LogicalKey;
[ProtoMember(4)]
public PurgeDateTimeDTO m_PurgeTime;
}
我创建了一个 ContractProtoBuf 列表,并添加了具有“没有后果”的值的数据。
public ctr()
{
DateTime date = new DateTime(2012 , 12, 03); ;
for (int i = 0; i < 5; i++)
{
LkVisiteurIdDTO visitid= new LkVisiteurIdDTO(10, 11, 12);
PurgeDateTimeDTO datetime= new PurgeDateTimeDTO(date, true);
ContractProtoBuf proto = new ContractProtoBuf();
proto.m_Index = i + 1;
proto.m_TechnicalKey = "m_TechnicalKey" + i;
proto.m_LogicalKey = visitid;
proto.m_PurgeTime = datetime;
protoContractList.Add(proto);
}
}
我序列化了获取 Byte [] 的列表,当我反序列化 Byte [] 时,返回列表不包含类型 PurgeDateTimeDTO 和 LkVisiteurIdDTO 中的相同值。
在返回列表中,我找到了日期时间 {01/01/0001 0:00:00} 和 visitid {0,0,0} 然而 m.Index 和 m_Technicalkey 具有很好的值(value)
最佳答案
你没有显示 DTO,但如果我假设 ContractProtoBuf
是一个 class
,那么你将添加每个相同实例时间。同样,您每次都添加相同的访问。通常,我希望它们有所不同,例如:
public ctr()
{
DateTime date = new DateTime(2012 , 12, 03); ;
for (int i = 0; i < 5; i++)
{
LkVisiteurIdDTO visitid= new LkVisiteurIdDTO(10, 11, 12);
PurgeDateTimeDTO datetime= new PurgeDateTimeDTO(date, true);
ContractProtoBuf proto = new ContractProtoBuf();
proto.m_Index = i + 1;
proto.m_TechnicalKey = "m_TechnicalKey" + i;
proto.m_LogicalKey = visitid;
proto.m_PurgeTime = datetime;
protoContractList.Add(proto);
}
}
但正如我所说 - 没有更多信息就无法确定。如果您能提供一个完整(即可运行)示例,我很乐意进一步研究。
关于c# - 使用 protobuf-net 反序列化不同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16560008/