Apache Thrift是否提供反射API?

时间:2014-10-22 03:42:58

标签: reflection thrift

thrift是否提供了一种在运行时检查struct字段的方法?

我的用例是C#,但问题是标准的Thrift API。

2 个答案:

答案 0 :(得分:0)

如果您在运行时可以访问IDL,则可以使用IDL的解析器并以此方式推断生成的字段。

我不是C#的专家,但您可以链接到Thrift可执行文件中使用的本机libparse库(我不确定解析库是否足够通用,我只是假设)

或者你可以使用Facebook的Swift(https://github.com/facebook/swift/tree/master/swift-idl-parser)中的解析器,或者从http://central.maven.org/maven2/com/facebook/swift/swift-idl-parser/0.13.2/swift-idl-parser-0.13.2.jar下载JAR。对于你的IMO案例来说,这可能更容易或更好,即使它是一个Java库,我认为它应该使用IKVM.net转换为CLR。

第三种愚蠢的简单和hackish方式是使用Thrift HTML生成器生成HTML文档并使用正则表达式解析或通过HTML Tidy运行并将其解析为XML

答案 1 :(得分:0)

跨语言没有标准的thrift API,因此除了序列化之外你可以做的事情是高度依赖于语言的。如果你不能仅使用反射来完成你想要的东西,那么检查thrift编译器为你感兴趣的thrift对象生成的代码。我没有看到C#thrift生成的代码,但它可能包含额外的可能对您有用的数据。

我对Java实现非常熟悉,我可以告诉你,使用Java的thrift,根本不需要使用反射。每个thrift生成的类都包含允许解串器从字段id号重构类的信息。 java thrift编译器创建静态成员和方法,其中包含您想要的所有内容。对于Java,它实际上比反射更好,因为它包含list / maps / sets的元素类型。

现在无法保证这些数据的格式在未来版本的节俭中不会发生变化,但鉴于所有各种协议都依赖于它们,所以隐藏了#t; API应该相当稳定。