Protobuf-net如何序列化List<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);
}
}
其中 pcs
是 PC
个对象的列表。截至目前,我在反序列化时遇到错误:
No parameterless constructor found for PC
我不知道为什么它需要一个无参数的构造函数来反序列化,但我只是想让我的反序列化工作。关于如何实现的任何想法?我这里好像做错了什么。
您有几个选择:
在 PC
中创建一个私有无参数构造函数。它将在反序列化时调用。
将 [ProtoContract(SkipConstructor = true)]
属性应用于 PC
。在那种情况下,对象将在未初始化状态下被实例化。
谨慎使用这个:如果您在任何构造函数之外的 class 中将字段初始化为某些默认值,这些初始化将不会发生。
示例:
[ProtoContract(SkipConstructor = true)]
public class PC
{
private int _something = 42;
public int Something { get { return _something; } }
public PC(string foo)
{
}
}
在这种情况下,Something
将 return 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);
这是我当前的序列化/反序列化代码
// 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);
}
}
其中 pcs
是 PC
个对象的列表。截至目前,我在反序列化时遇到错误:
No parameterless constructor found for PC
我不知道为什么它需要一个无参数的构造函数来反序列化,但我只是想让我的反序列化工作。关于如何实现的任何想法?我这里好像做错了什么。
您有几个选择:
在
PC
中创建一个私有无参数构造函数。它将在反序列化时调用。将
[ProtoContract(SkipConstructor = true)]
属性应用于PC
。在那种情况下,对象将在未初始化状态下被实例化。谨慎使用这个:如果您在任何构造函数之外的 class 中将字段初始化为某些默认值,这些初始化将不会发生。
示例:
[ProtoContract(SkipConstructor = true)] public class PC { private int _something = 42; public int Something { get { return _something; } } public PC(string foo) { } }
在这种情况下,
Something
将 return0
反序列化对象。
如果您使用像 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);