【发布时间】:2011-11-27 15:00:27
【问题描述】:
使用 protobuf-net.dll 2.0.0.431
我正在尝试使用 [DataContract] 和 [DataMember] 序列化类层次结构。
[DataContract]
[KnownType(typeof(LoginRequest))]
public class Message
{
[DataMember(Order = 2)]
public int Id { get; set; }
}
[DataContract]
public class LoginRequest : Message
{
[DataMember(Order = 1)]
public string Username { get; set; }
[DataMember(Order = 2)]
public string Password { get; set; }
}
并序列化/反序列化:
using (var file = File.Create(filename))
{
Serializer.Serialize(file, loginRequest);
}
LoginRequest deserialized;
using (var file = File.OpenRead(filename))
{
deserialized = Serializer.Deserialize<LoginRequest>(file);
}
ReflectionUtils.Compare(loginRequest, deserialized);
抽象类Message的Id字段没有序列化。
为了让它工作,我必须用以下方式装饰消息:
[ProtoInclude(1, typeof(LoginRequest))]
这是为什么?我已经阅读了this similar question,但 Marc 得出的结论是“v2 不再需要这个 - 你可以在运行时指定它,或者使用 DynamicType”
除了KnownType之外,我不希望指定任何其他内容
【问题讨论】:
标签: c# serialization protobuf-net