当前位置: 代码迷 >> Web Service >> WebService 接口中的参数是接口时如何序列化和反序列化的有关问题
  详细解决方案

WebService 接口中的参数是接口时如何序列化和反序列化的有关问题

热度:195   发布时间:2016-05-02 02:19:00.0
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传参中有接口类型的。。。。

 

大神们看下我这个思路是不是哪有问题?

有没有哪位大神遇到过类似的问题或者有好的解决方法?
------解决方案--------------------
GSON没有实现过,但是如果使用其他的序列化类,序列化接口是可以的,例如XMLSerXXX

只是在序列化时候不能直接序列化接口类型的,因为接口类型毕竟只是对一组行为和属性的描述,所有需要转变下思路将接口类型用object标识,我用个XmlSerializer例子来说明吧:
一个类:

[Serializable]
public class Person
{
public string Name{get;set;}

//我其实是个IList
public object RelNames{get;set;}

}

实现

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

}
}

------解决方案--------------------
ps: 序列化的核心就是对反射的应用,可以自己定制序列化工具

而且实际应用中是不推荐对接口的序列化操作的,如果确实需要,请做个map 
  相关解决方案