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

发布于 2024-10-18 15:09:14 字数 654 浏览 4 评论 0原文

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

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

这是我的 .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 () {}

  ...
}

I'm using protobuf-net (thanks Marc :) ) to serialize my object model, but I want the object model not to be visible outside my assembly (specifically, I want it to be internal).

By default protobuf-net seems to generate public partial classes. Can I tell it to mark the class internal?

Here's a cut down version of my .proto file:

package MyProject.Core.Persistence;

option optimize_for = SPEED;

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

Which generates the following class definition:

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

  ...
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥有 2024-10-25 15:09:14

目前还没有;不过,您可以编辑 csharp.xslt 以满足您自己的需要。

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

Not at the moment; however you can edit csharp.xslt to suit your own needs.

This doesn't seem a common case, but it could be added as an option easily enough.

潦草背影 2024-10-25 15:09:14

解决方案:

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

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

Solution:

you can add the following two lines before your message definition.

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

Full Sample Code:

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

Reference:

The definition of message access in mgravell's protogen.proto

enum Access {
    option (.protobuf_net.enumopt) = {
       access: PUBLIC
    };
    INHERIT = 0;
    PUBLIC = 1;
    PRIVATE = 2;
    INTERNAL = 3;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文