C# 使用protobuf net反序列化不同的列表
我对反序列化Protobuf net有问题。我序列化了一个C# 使用protobuf net反序列化不同的列表,c#,protocol-buffers,protobuf-net,C#,Protocol Buffers,Protobuf Net,我对反序列化Protobuf net有问题。我序列化了一个列表,但是当我反序列化时,返回的列表与第一个列表不同。缺少数据。 我不明白为什么 我在ctr中初始化我的列表 public ctr() { DateTime date = new DateTime(2012 , 12, 03); ; LkVisiteurIdDTO visitid= new LkVisiteurIdDTO(10, 11, 12); PurgeDateTimeDTO datetime= new Pur
列表
,但是当我反序列化时,返回的列表
与第一个列表不同。缺少数据。
我不明白为什么
我在ctr中初始化我的列表
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();
}
}
我创建一个ContractProtoBuf列表,并添加带有值的数据“那没有后果。”
public-ctr()
{
DateTime日期=新的日期时间(2012年12月3日);
对于(int i=0;i<5;i++)
{
LKVisiteUridTo visitid=新的LKVisiteUridTo(10,11,12);
PurgeDateTimeDTO datetime=新的PurgeDateTimeDTO(日期,true);
ContractProtoBuf proto=新ContractProtoBuf();
原始m_指数=i+1;
proto.m_TechnicalKey=“m_TechnicalKey”+i;
proto.m_LogicalKey=visitid;
proto.m_PurgeTime=日期时间;
protoContractList.Add(proto);
}
}
我序列化了获取字节[]的列表,当我反序列化字节[]时,返回列表不包含相同的值在PurgeDateTimeDTO和lkvisiteuridto类型中
在返回列表中,我找到dateTime{01/01/0001 0:00:00}和visitid{0,0,0}
然而,m.Index和m_Technicalkey有很好的价值您不显示DTO,但是如果我假设
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);
}
}
public-ctr()
{
DateTime日期=新的日期时间(2012年12月3日);
对于(int i=0;i<5;i++)
{
LKVisiteUridTo visitid=新的LKVisiteUridTo(10,11,12);
PurgeDateTimeDTO datetime=新的PurgeDateTimeDTO(日期,true);
ContractProtoBuf proto=新ContractProtoBuf();
原始m_指数=i+1;
proto.m_TechnicalKey=“m_TechnicalKey”+i;
proto.m_LogicalKey=visitid;
proto.m_PurgeTime=日期时间;
protoContractList.Add(proto);
}
}
但正如我所说,如果没有更多的信息,就不可能确定。如果您能提供一个完整的(即可运行的)示例,我很乐意进一步研究。如果没有看到您正在序列化的数据示例或差异,很难提供帮助。如果您能生成一个简短但完整的程序来演示问题,那将非常有帮助。重新编辑:您说
PurgeDateTimeDTO
和lkvisiteuridto
不包含相同的值。。。但你们实际上并没有包括那些让我复制它的东西。我真的很有兴趣帮助你找到这个问题(作为一名图书馆作者,我希望人们能够成功)——但没有背景,我无能为力。
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);
}
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);
}
}