WebService 接口中的参数是接口时怎么序列化和反序列化的问题

Nolan_hu 2013-08-28 04:32:31
最近有个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传参中有接口类型的。。。。



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

有没有哪位大神遇到过类似的问题或者有好的解决方法?
...全文
453 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nolan_hu 2013-09-04
  • 打赏
  • 举报
回复
引用 2 楼 u011573693 的回复:
ps: 序列化的核心就是对反射的应用,可以自己定制序列化工具 而且实际应用中是不推荐对接口的序列化操作的,如果确实需要,请做个map
谢谢你的回复! 确实gson不支持接口序列化,我现在换了一种思路,将接口中的属性元素打包放一个bean中,传过去后再重新构造成接口,过程类似于自定义序列化。
1987andy 2013-09-04
  • 打赏
  • 举报
回复
ps: 序列化的核心就是对反射的应用,可以自己定制序列化工具 而且实际应用中是不推荐对接口的序列化操作的,如果确实需要,请做个map
1987andy 2013-09-04
  • 打赏
  • 举报
回复
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"}
			              });
			
		}
	}

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧