【发布时间】:2014-10-20 16:11:02
【问题描述】:
我有这样的课程设置(我删除了很多其他属性,因为它们与我的问题无关......):
public class Record : IRecord
{
/// <summary>
/// The type of recovery record and data needed to recover this record.
/// </summary>
[DataMember(Order = 1)]
public IRecord Entry { get; private set; }
[IgnoreDataMember]
public object Entry
{
get { return Entry; }
}
}
[ProtoContract
, ProtoInclude(2, typeof(CaseRecord))
, ProtoInclude(3, typeof(UserRecord))
]
public interface IRecord: IEntry
{
}
public interface IEntry
{
long EntryId { get; set; }
long DataSourceId { get; set; }
}
public class UserRecord : RecordEntry<UserRecord>
{
// ...other datamembers...
[IgnoreDataMember]
public override long EntryId { get; set; }
[IgnoreDataMember]
public override long DataSourceId { get; set; }
}
[DataContract]
public abstract class RecordEntry<T> : RType<T>, IRecord
where T : RType<T>, new()
{
// other datamembers...
public abstract long EntryId { get; set; }
public abstract long DataSourceId { get; set; }
}
我像这样(反)序列化记录流:
Serializer.SerializeWithLengthPrefix(_stream, record, PrefixStyle.Base128);
Serializer.DeserializeWithLengthPrefix<Record>(_stream, PrefixStyle.Base128);
当我尝试反序列化时,我的Record 对象(类型为UserRecord)为EntryId 和DataSourceId 返回值0,我不完全确定为什么。我从Entry 和DataSource id 中删除了[IgnoreDataMember],但在反序列化时我的值仍然为0。对象的所有其他属性均已正确填充。
用户记录是在我的[TestMethod]...中创建的...
userRecord1 = new UserRecord()
{
// ...other datamembers
EntryId = 123456789,
DataSourceId = 123456789,
};
【问题讨论】:
标签: c# serialization protobuf-net