我有以下课程
[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,序列化将起作用。
我做错了吗?
答案 0 :(得分:6)
您已告诉它序列化字段。该字段未使用[ProtoIgnore]
进行修饰。 属性是,并没有好的方法将字段等同于属性。使用术语&#34;字段&#34;这是非常具体和有意的:它并不意味着&#34;成员&#34; - 它意味着&#34;字段&#34;。
选项:
[ProtoIgnore]
如果自动实现的属性允许与字段类事件相同的语法,那将是 nice ,即
[field:ProtoIgnore]
public int Foo {get;set;}
但是,我非常确定该语言不支持此功能。