更新到最新的protobuf-net(2.0.0.601)之后,现在我在尝试序列化System.Version类型的值时遇到异常。

[ProtoContract(SkipConstructor=true)]
public class ServerLoginInfo
{
    [ProtoMember(1)]
    public Version ServerVersion { get; set; }
}

以前在2.0.0.480中可以正常工作,而无需做任何特殊的事情。

是否可以使其在新版本中运行,还是我唯一的回滚到旧版本的选择?

(我还需要序列化/反序列化才能与旧的protobuf-net版本向后兼容。)

最佳答案

我怀疑这与AllowParseableTypes有关-即它是否寻找静态的Parse方法作为后备方法。如果我还记得,则无法在默认模型上启用此功能,但是我认为我将在下一次部署中删除该限制。但现在:

var model = TypeModel.Create();
model.AllowParseableTypes = true;

然后存储模型(并重复使用),并使用model.Serialize/model.Deserialize。

如果我更改此默认模型限制,则只需:
RuntimeTypeModel.Default.AllowParseableTypes = true;

关于c#-4.0 - 在protobuf-net中没有为System.Version定义序列化程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13313769/

10-13 07:39
查看更多