假设我有一个班级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)
也许我需要使用Merge?我不太确定我应该如何使用它。
public static T MergeWithLengthPrefix<T>(System.IO.Stream source, T instance, ProtoBuf.PrefixStyle style)
我正在使用protobuf-net v2.0.0.480。
答案 0 :(得分:1)
听起来就像你想要更新对象的文件版本一样 - 这是正确的吗?如果是这样,如果不重写文件就不可能 - 这就像问“我如何更新xml文件中间的元素” - 很容易做到,但你需要重写整个文件文件。好吧,技术上你可以在之后重新编写你想要改变的东西,但坦率地说,最简单的选择可能是:读取然后重写。
如果您需要定期 ,并且需要快速追加,我可能会建议(在您的应用级别)一种策略,允许您替换对象只需在最后添加一个新版本 - 即如果你看到一个重复的id,则假设替换之前的事件 - 但是,这意味着你的读取需要读取所有内容,因此它可能是一个想偶尔重新定位。
但最简单的答案,除非你需要一些花哨的东西,否则将是: