【发布时间】:2016-10-06 22:13:15
【问题描述】:
namespace MyNamespace
{
public enum MyEnum
{
EnumName1 = 1,
EnumName2 = 2,
...
[ProtoContract(Name=@"MyClassProto")]
[Serializable]
public class MyClass : IExtensible
{
[ProtoMember(1, IsRequired = false, Name = @"MyEnumProperty", DataFormat = ProtoBuf.DataFormat.Default)]
[System.ComponentModel.DefaultValue(1)]
public MyEnum MyEnumProperty;
...
var myObjectIn = new MyClass
{
MyEnumProperty = MyEnum.EnumName1,
...
};
MyClass myObjectOut;
using (var stream = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(stream, myObjectIn);
stream.Seek(0, SeekOrigin.Begin);
myObjectOut = ProtoBuf.Serializer.Deserialize<MyClass>(stream);
}
System.InvalidCastException : 从 'System.Int32' 到的无效转换 'MyNamespace.MyEnum'。
【问题讨论】:
-
出于好奇,如果您最初设置
ProtoBuf.Meta.RuntimeTypeModel.Default.AutoCompile = false;,还会出现这种情况吗?我试图在小提琴中重现这一点,但不能:见dotnetfiddle.net/YTaKDJ。但是,出于安全原因,dotnetfiddle.net 不支持Reflection.Emit(),所以我不得不禁用自动编译 - 当我这样做时,错误无法重现。
标签: c# serialization enums protocol-buffers protobuf-net