【问题标题】:Can I control the visibility of the generated class with Protobuf-net?我可以使用 Protobuf-net 控制生成的类的可见性吗?
【发布时间】:2011-02-22 18:56:38
【问题描述】:

我正在使用protobuf-net(感谢 Marc :))序列化我的对象模型,但我希望对象模型在我的程序集之外不可见(具体来说,我希望它是内部的)。

默认情况下,protobuf-net 似乎会生成公共部分类。我可以告诉它标记课程internal吗?

这是我的.proto 文件的精简版:

package MyProject.Core.Persistence;

option optimize_for = SPEED;

message DataObject {
  required string name = 1;
  required int32 id = 2;
}

生成以下类定义:

[global::System.Serializable,
   global::ProtoBuf.ProtoContract(Name=@"DataObject")]
public partial class DataObject : global::ProtoBuf.IExtensible
{
  public DataObject () {}

  ...
}

【问题讨论】:

    标签: c# protocol-buffers protobuf-net


    【解决方案1】:

    暂时没有;但是您可以编辑csharp.xslt 以满足您自己的需要。

    这似乎并不常见,但可以很容易地将其添加为选项。

    【讨论】:

      【解决方案2】:

      解决方案:

      您可以在消息定义之前添加以下两行。

      import "protobuf-net/protogen.proto";
      option (.protobuf_net.fileopt).access = INTERNAL;
      

      完整示例代码:

      package MyProject.Core.Persistence;
      
      import "protobuf-net/protogen.proto";
      option (.protobuf_net.fileopt).access = INTERNAL;
      
      option optimize_for = SPEED;
      
      message DataObject {
        required string name = 1;
        required int32 id = 2;
      }
      

      参考:

      mgravell的protogen.proto中对消息访问的定义

      enum Access {
          option (.protobuf_net.enumopt) = {
             access: PUBLIC
          };
          INHERIT = 0;
          PUBLIC = 1;
          PRIVATE = 2;
          INTERNAL = 3;
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-25
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-18
        • 2015-09-28
        相关资源
        最近更新 更多