我能否使用Protobuf-net控制生成类的可见性?

4
我正在使用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 () {}

  ...
}
2个回答

3

目前暂无此功能;但是您可以编辑 csharp.xslt 以适应自己的需求。

这似乎不是一个常见情况,但很容易将其作为一种选项添加进去。


1

解决方案:

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

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接