c# - 使用 protobuf-net 反序列化不同的列表

标签 c# protocol-buffers protobuf-net

反序列化 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/

相关文章:

c++ - 带有 CMake 和静态库/Z7 标志的 Visual Studio

c# - 无注释的protobuf-net序列化

c# - protobuf-net 代码生成器

c# - Gzipped 内容不反射(reflect)输入

c# - 自定义 T4 生成器生成的类看起来很乱

c# - 根据数组元素对数组的每 500 个元素进行分组

tcp - 如何编写一个高性能的 Netty 客户端

arm - 交叉编译c++-文件: File format not recognized

c# - 从 protobuf-net 读取时跳过数据

c# - 使用不可变栈