Serializer正在尝试序列化用[ProtoIgnore]修饰的属性

Plu*_*luc 2 .net c# serialization protobuf-net

我有以下课程

[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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我在调​​用ToMD5Hash时遇到异常.它表示No serializer defined for type: SomeNamespace.Bar即使属性使用ProtoIgnore属性进行修饰.

注意:如果我删除ImplicitFields并使用ProtoMember,序列化将起作用.

难道我做错了什么?

Mar*_*ell 6

你告诉它要序列化字段.这个领域没有装饰[ProtoIgnore].该属性是,并没有很好的方法将字段等同于属性.这里使用术语"字段"是非常具体和有意的:它不代表"成员" - 它意味着"字段".

选项:

  • 告诉它序列化公共成员,而不是字段
  • 使用手动实现的属性并标记字段[ProtoIgnore]
  • 手动标记成员

如果自动实现的属性允许与字段类事件相同的语法,那将是很好的

[field:ProtoIgnore]
public int Foo {get;set;}
Run Code Online (Sandbox Code Playgroud)

但是,我很确定这种语言不支持.