假设我有一个课程MyClass
:
[ProtoContract]
public class MyClass
{
[ProtoMember(1)]
public string PropA { get; set; }
[ProtoMember(2)]
public string PropB { get; set; }
// ...
[ProtoMember(12)]
public string PropL { get; set; }
}
我也有一个
List<MyClass>
,protobuf-net二进制文件反序列化到其中。如何动态更新序列化文件(可能包含成百上千个序列化的MyClass
对象)中包含的MyClass
实例?我查看了Marc对其他问题的一些评论,看来我需要使用Deserialize
并传入MyClass
实例,但是我看到的唯一方法签名是public static T Deserialize<T>(System.IO.Stream source)
也许我需要使用合并?我不太确定该如何使用它。
public static T MergeWithLengthPrefix<T>(System.IO.Stream source, T instance, ProtoBuf.PrefixStyle style)
我正在使用protobuf-net v2.0.0.480。
最佳答案
听起来您想更新对象的文件版本-正确吗?如果是这样,那么不重新编写文件就不可能-就像问“如何在xml文件中间更新元素”-相当容易做到,但是您需要重新编写整个文件文件。好吧,从技术上讲,您可以在要更改的位之后重新编写内容,但是坦率地说,最简单的选择可能是:先读取然后再写入。
如果您需要定期执行此操作并且需要快速添加,我可能会建议(在您的应用程序级别)一种策略,该策略允许您通过在末尾简单地添加新版本来替换对象-即,如果看到重复的版本id,假设它取代了以前的出现-但是,这意味着您的读取需要通读所有内容,因此偶尔重新设置基准可能是一个主意。
但是,除非您需要一些特别的方法,否则最简单的答案是:
将内容反序列化为列表(或类似内容)
进行所需的更改
连载
关于c# - 更新已序列化的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13575840/