最近的一个项目需要C#调用Java的cxf发布的接口,接口参数文档只给我的是两个long型,但是通过我动态加载发现,参数是四个。
比如接口文档给的接口是
TestFunc(long, long);
而我通过动态加载,反射后发现接口为
TestFunc(long, bool, long, bool);
之前一直怀疑是否接口文档没有及时更新,造成的错误。不过后面空闲后仔细跟踪了代码,并用reflector反射了动态编译的dll。
发现dll中多出的bool参数的名称很有规律。
比如上面接口反射出来的具体参数名为
TestFunc(long userid, bool useridSpecified, long sno, bool snoSpecified);
看见没,bool的参数名就是前面long型的参数名加上Specified。
在网上搜索了很久,搜索【c#动态调用cxf 多参数】,一直搜索不到结果,最后用【c# Specified属性】好不容易才搜到一篇文章
http://blog.csdn.net/xiaogui340/article/details/8548847
才明白原来这个多出来的属性表示是否序列化其对应参数,并且string型参数是不需要这个属性的。
因为java接口不是我写的,我第一次调用,也不能清楚知道是否如文中所述,如果没有此属性,则int,datetime之类的类型不能传到服务端。
不过我这次参数个数增多,那肯定是由于这个原因而增加的属性。