namespace MyNamespace
{
public enum MyEnum
{
EnumName1 = 1,
EnumName2 = 2,
...
[ProtoContract([email protected]"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の: 'MyNamespace.MyEnum' から '可能System.Int32' から無効なキャスト。いるProtobufネット:列挙型の変換エラー
「ProtoBuf.Meta.RuntimeTypeModel.Default.AutoCompile = false;」を最初に設定した場合、これはまだ発生しますか?私はこれをフィドルで再現しようとしましたが、できませんでした:https://dotnetfiddle.net/YTaKDJを見てください。しかし、セキュリティ上の理由から、https://dotnetfiddle.netは 'Reflection.Emit()'をサポートしていないので、私は自動コンパイルを無効にしなければなりませんでした - そして、私はそのバグを再現できませんでした。 – dbc