用属性装饰自动生成的 C# 类(来自 proto 文件)及其属性

Decorate autogenerated C# class (from proto file) and it's properties with attributes

提问人:goodstas 提问时间:9/28/2023 最后编辑:goodstas 更新时间:9/28/2023 访问量:32

问:

我有一些原型文件(谷歌协议缓冲区)。

message PersonDTO
{
   int32 id = 1;
   string name = 2;
   repeated AddressDTO addresses = 3;
}

message AddressDTO
{
   int32 id = 1;
   string fullAddress = 2;
   string city = 3;
} 

我想实现一个服务器,该服务器从客户端 byte[] 接收来自 RabbitMQ 交换的 byte[],该交换使用 google 协议缓冲区进行序列化。 服务器将此 byte[] 反序列化为相应的 C# 类 PersonDTO,该类由 grpc.tools nuget 从我的原型文件自动生成。

我想使用相同的自动生成的类来使用 Redis OM。 要将此 C# 类与 Redis OM 一起使用,必须根据 https://redis.io/docs/clients/om-clients/stack-dotnet/ 使用 Indexed 和 Searchable 等属性修饰该类的属性

我想知道如何使用 proto 文件中自动生成的 C# 类来使用 Redis OM。 我有一个想法,为这个任务编写某种源生成器。但我没有这方面的经验。 可能是我理解错了,但源生成器应该生成一个新文件,我实际上需要更新自动生成的文件。

将感谢任何关于如何开始的好建议。 提前致谢。

C# .NET 属性 protocol-buffers sourcegenerators

评论

0赞 Fildor 9/28/2023
有注释的替代方法吗?也许是某种流畅的配置?
0赞 goodstas 9/28/2023
从我帖子中附加的链接中,我可以看到只有一个选项。
1赞 Fildor 9/28/2023
如果是这样,......它会很脏。你要么必须找到一种方法将注解注入到代码生成过程中,要么创建一组基本相同的 dto,你可以注释和映射它们,这当然也有点丑陋。或者你放弃了由proto文件自动生成的DTO,而是手工制作所有内容,为Redis和ProtoBuf进行注释......这些是我会立即看到的选项。但也许有更好的东西。
0赞 goodstas 9/29/2023
我考虑了这两种选择,但没有一个是我喜欢的。该过程应该是自动化的,无需手动更改。我想到了一些文件解析器,当它识别属性并且它的类型时,它可以插入具有适当属性的行......但考虑到这是从 proto 自动生成的文件(它不是标准类定义),所以这将是一个挑战。
0赞 Fildor 9/30/2023
不过,可能适用于 Rozlyn Tools。但我不确定在构建过程中将其放在哪里。

答: 暂无答案