Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用protobuf net反序列化不同的列表_C#_Protocol Buffers_Protobuf Net - Fatal编程技术网

C# 使用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

我对反序列化Protobuf net有问题。我序列化了一个
列表
,但是当我反序列化时,返回的
列表
与第一个列表不同。缺少数据。 我不明白为什么

我在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);
    }    
}