序列化程序正在尝试序列化用[ProtoIgnore]修饰的属性
本文关键字:序列化 属性 ProtoIgnore 程序 | 更新日期: 2023-09-27 18:28:28
我有以下类
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public class Foo
{
public int foo { get; set; }
[ProtoIgnore]
public Bar bar { get; set; }
public int ToMD5Hash()
{
var md5 = MD5CryptoServiceProvider.Create();
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize<Foo>(ms, this);
var hash = md5.ComputeHash(ms.ToArray());
return BitConverter.ToInt32(hash, 0);
}
}
}
但是我在调用ToMD5Hash时遇到了一个异常。即使使用ProtoIgnore属性修饰属性,它也会显示No serializer defined for type: SomeNamespace.Bar
。
注意:如果我删除ImplicitFields并使用ProtoMember,则序列化有效。
我做错什么了吗?
您已经告诉它序列化字段。该字段未使用[ProtoIgnore]
进行修饰。属性是,并且没有将字段等同于属性的好方法。这里使用"字段"一词是非常具体和有意的:它的意思不是"成员",而是"字段"。
选项:
- 告诉它序列化公共成员,而不是字段
- 使用手动实现的属性,并用
[ProtoIgnore]
标记字段 - 手动标记成员
如果自动实现的属性允许与类似字段的事件(即)相同的语法,那将是很好的
[field:ProtoIgnore]
public int Foo {get;set;}
然而,我确信这在语言中是不受支持的。