我试图序列化一些类型安全枚举,我实现了像the answer to this question。当我序列化一个包含引用的对象,比如FORMS
(来自我链接的答案)时,我想在反序列化时将引用恢复为静态字段FORMS
。在C中的协议缓冲区和Typesafe枚举#
我有一个解决方案,但它似乎有点蹩脚,因为我不得不将它添加到包含typeafe枚举的任何类。它非常简单,只是使用回调来存储和检索枚举的value
领域:
public class SomethingContainingAnAuthenticationMethod
{
[ProtoMember(1)]
public int AuthenticationMethodDataTransferField { get; set; }
public AuthenticationMethod AuthenticationMethod { get; set; }
[ProtoBeforeSerialization]
public void PopulateDataTransferField()
{
AuthenticationMethodDataTransferField = AuthenticationMethod.value;
}
[ProtoAfterDeserialization]
public void PopulateAuthenticationMethodField()
{
AuthenticationMethod = AuthenticationMethod.FromInt(AuthenticationMethodDataTransferField);
}
}
任何其他的想法,将不胜感激。
您可以尝试在类型安全的枚举类上实现ISerializable。或者甚至可以更好地为所有类型安全的枚举类创建基类并在基类上实现ISerializable。当然,您应该将SerializableAttribute添加到每个类型安全的枚举类。另外要注意的是平等测试。您需要值相等而不是引用相等(http://msdn.microsoft.com/en-us/library/dd183755.aspx)。 –
K;你能澄清几件事吗?一个枚举应该在没有任何工作的情况下序列化好 - 如果你只是用ProtoMember标记枚举成员会发生什么?你试图避免的症状是什么?另外:你提到“静态字段” - 你是否确实是指'静态',如“特定于类型的,而不是实例特定的”?要么...? –
@Panos这个例子表明OP在谈论protobuf-net,这些都不适用。 –