簡體   English   中英

Protobuf-net如何序列化列表<T>

[英]Protobuf-net how to serialize List<T>

這是我當前的序列化/反序列化代碼

// SERIALIZE
using (var file = File.Create(@"..\..\SavedPCInfo.bin"))
{
    Serializer.Serialize(file, pcs);
}

//DESERIALIZE
if (File.Exists(FileName))
{
     using (var file = File.OpenRead(@"..\..\SavedPCInfo.bin"))
     {
          pcs = Serializer.Deserialize<List<PC>>(file);
     }
}

其中pcsPC對象的列表。 到目前為止,反序列化時出現錯誤:

找不到適用於PC的無參數構造函數

我不知道為什么它需要無參數的構造函數來反序列化,但是我只是想讓反序列化起作用。 關於如何實現的任何想法? 我似乎在這里做錯了。

您有兩種選擇:

  1. PC創建一個私有的無參數構造函數。 將要求反序列化。

  2. [ProtoContract(SkipConstructor = true)]屬性應用於PC 在這種情況下,對象將以未初始化狀態實例化。

    請謹慎使用此方法:如果您在任何構造函數之外的類中將字段初始化為某些默認值,則不會發生這些初始化。

    例:

     [ProtoContract(SkipConstructor = true)] public class PC { private int _something = 42; public int Something { get { return _something; } } public PC(string foo) { } } 

    在這種情況下, Something將在反序列化的對象上返回0

如果使用諸如json-io之類的序列化庫,該序列化庫將Java序列化為JSON(反之亦然),則通常不需要添加任何構造函數。 該庫將使用對象上的現有構造函數(必要時甚至使用私有構造函數)來實例化您的對象。

轉換為JSON格式進行序列化還具有使序列化的數據具有人類可讀格式的額外好處。

json-io: https : //github.com/jdereg/json-io編輯JSON: http : //www.jsoneditoronline.org/

一行將序列化您的數據:

String json = JsonWriter.objectToJson(root);

一行將反序列化它:

Object root = JsonReader.jsonToJava(json);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM