У меня проблема с десеризацией Protobuf-net. Я сериализую List<>
, но когда я десериализую возвращенный List<>
, он не идентичен первому. Отсутствуют данные. Я не понимаю, почему.Deserializing другой Список с protobuf-net
инициализирую мой 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.
В списке возвращенной я нахожу DATETIME {01/01/0001 0:00:00} и visitid {0,0,0} Однако m.Index и m_Technicalkey имеют хорошее значение
Очень сложно помочь, не видя пример данных, которые вы сериализуете, или какие различия. Это действительно помогло бы, если бы вы могли создать короткую, но * полную * программу, которая демонстрирует проблему. –
Re your edit: вы говорите, что 'PurgeDateTimeDTO' и' LkVisiteurIdDTO' не содержат одинаковых значений ... но вы на самом деле не включили те, которые я могу воспроизвести. Я искренне заинтересован в том, чтобы помочь вам найти проблему (как автор библиотеки, я хочу, чтобы люди преуспели), но я не могу помочь без контекста. –