WebService 接口中的参数是接口时怎么序列化和反序列化的问题
最近有个WebService的项目,服务端发布的WebService接口包含一个接口参数,而且这个接口还比较复杂。于是用了gson来序列与反序列,但是反序列时,说没有无参构造函数。
好吧,我接口哪有构造函数,于是看gson的API,发现可以使用InstanceCreator这个接口来实现无参构造的问题。
Java代码
//这里是gson API中的例子
class IdInstanceCreator implements InstanceCreator<Id> {
public Id createInstance(Type type) {
return new Id(Object.class, 0L);//我怎么知道是那个子类啊啊啊。。。
}
}
但问题又来了,如颜色部分。
卡在这里卡了一天了,翻阅网络上各种帖子,也没见人有说WS传参中有接口类型的。。。。
大神们看下我这个思路是不是哪有问题?
有没有哪位大神遇到过类似的问题或者有好的解决方法? webservice gson --------------------编程问答-------------------- GSON没有实现过,但是如果使用其他的序列化类,序列化接口是可以的,例如XMLSerXXX
只是在序列化时候不能直接序列化接口类型的,因为接口类型毕竟只是对一组行为和属性的描述,所有需要转变下思路将接口类型用object标识,我用个XmlSerializer例子来说明吧:
一个类:
[Serializable]
public class Person
{
public string Name{get;set;}
//我其实是个IList
public object RelNames{get;set;}
}
实现
--------------------编程问答-------------------- ps: 序列化的核心就是对反射的应用,可以自己定制序列化工具
class Program
{
public static void Main(string[] args)
{
XmlSerializer sre = new XmlSerializer(typeof( Person),new Type[] {typeof(List<string>)});
FileStream fs = new FileStream("c:\\te.xml",FileMode.CreateNew,FileAccess.ReadWrite);
sre.Serialize( fs,new Peson{
Name = "andy",
RelNames = new List<string>{ "11111","22222"}
});
}
}
而且实际应用中是不推荐对接口的序列化操作的,如果确实需要,请做个map --------------------编程问答--------------------
谢谢你的回复!
确实gson不支持接口序列化,我现在换了一种思路,将接口中的属性元素打包放一个bean中,传过去后再重新构造成接口,过程类似于自定义序列化。
补充:.NET技术 , Web Services