.net调用Java webservices反序列化错误? 看你的InnerException,可能是'日期型'数据的格式不对。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你取出的XML有错误,先得到整个XML,再解析里面的数据 你好,这个WebServices不是编译为XML的,怎么用XML解析?能给详细点吗? 我调用的Webservices那个方法是返回对象。这样可以"先得到整个XML,再解析里面的数据"? XML<fc iii=555 /><fc iii=666 />你用dataset:DataSet ds = w.getSupportDataSet()string st = dt.Tables["fc"].Rows[1]["iii"].ToString(); dataset解析XML:http://blog.csdn.net/wind_cloud2011/article/details/18255557 PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2");我这个返回的是一个对象数组,Webservices我是不可以修改的,怎么用Dataset?转换类型? 你好,现在是读不出里面的数据,调试到调用哪里就报错了?paClient.getPatientID("1,2")这个就是调用Webservices的getPatientID方法。PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2"); 那应该是后面这个参数("1,2")有误吧,你的getPatientID方法要知道阿 参数应该没错的,我看到Java里面直接这么写的,如下:SELECT * FROM patient WHERE id in (#{pVo}) --pVO是我传的参数。不知道能不能在调用getPatientID之前,先解析为xml?有什么方法? 你在[WebMethod] 里可返回XML或dataset的http://www.2cto.com/kf/201307/226970.html 我引用的是一个Java webservices,并且我不可以修改这个WebServices。只能通过.net调用它。 你看一下getPatientID的方法,返回是什么类型数组? 返回的是WebServicePatientVo[],WebServicePatientVo是一个实体,有下面这个字段:private int id; private String s_account_id; private String chinese_given_name; private String chinese_sur_name; private String given_name; private String sur_name; private String nickname; private int sex_id; private int address_id; private String pfullName; private String patient_no; private String tel_home; private String tel_mobile; private String tel_office; private String phone; private String date_created; private Integer encounter_id; private int recordsPerPage = 0; private int totalRecords = 0; private Integer rowFrom=null; private Integer rowThru=null; private int pageNumber = 0; private List list = null; private String address_district; private String address_street; private String address_area; private Date dob; private String order = null; private String orderBy = null; private String ordering = null; string[] s = new string[30];//声明string数组存放返回结果 s = paClient.getPatientID("1,2");这样就取得webservice 返回的数组s[0]就对应ids[1]对应s_account_id 如果正常返回这样也取回数据 PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2"); foreach (WebServicePatientVo m in paID) { messagebox.show(m.id); messagebox.show(m.s_account_id); }可你在 PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2");这句子就出错了,总觉得参数写得不对 Java里面getPatientID("1,2,")是这样传的,我又试了下 还是不行 Java里面getPatientID("1,2,")是这样传的,我又试了下 还是不行参数应该没错的吧,我试下传个无效的参数时返回null就没有报错,所以应该是拿到数据时有问题吧,不知道会不会是date类型.net与Java有差异? 返回值格式出错,应该是这个:private Date dob;日期格式太复杂,还是换成string 那有可能就是这里的date了,private Date dob;C#没这个 我不可以修改这个private Date dob;不知道C#有什么方式可以处理吗? 对方提供的Webservices我不能够修改。还有其他方式? 可能就是private Date dob这里面有错误,这Java中调用时返回数据格式为“Sun Mar 08 16:35:58 CST 2009”,这个在.net中是不能转换的。有没有什么方法能在getPatientID()获取数据前将这个方法解析为xml? 关键是你调用时就出错了PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2")就无法读取数据了,如果能读取数据,转换就可阿 难道只有修改Java webservices这一种方法了? 我引用Java Webservices的方式是在添加服务引用里面直接输入Java的地址,然后直接调用。另外我也试过用Visual studio自带的命令行工具,把Java Webservices自动生成一个类,添加到项目中,在调用类,还是报错。或者还有什么其他方式调用Java Webservices?能够在调用方法前就转换date类型? 你看一下这个http://hi.baidu.com/bopdawpdarbenxq/item/8a6db9c7a1900c090ad93ac5 在.net Web项目中解决了这个问题,方法如下:找到引用的Webservices中Reference.cs文件,修改date类型为Object类型如下://private System.Nullable<System.DateTime> dobField; //原来的private object dobField; //现在的找到下面方法一并修改,如下:[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] //DataType="date", public object dob { get { return this.dobField; } set { this.dobField = value; this.RaisePropertyChanged("dob"); } }但是还有问题,我在Windows Phone 8中用同样方法修改,还是报错,不知道为什么? 在Windows Phone 8是同样的错误? windows Phone 8中错误如下:“System.ServiceModel.FaultException”类型的异常在 System.ServiceModel.ni.dll 中发生,但未在用户代码中进行处理但是觉得应该是同样的错误,因为我试着传个无效的参数,可以返回null,不会报错,所以猜测可能还是Date类型错误。 真是郁闷,搞了几天,终于解决了,无意中测试改为String类型就可以拿到数据了。但是没明白为什么Object类型就不行,难道是因为Java中没有Object类型的问题? 关于打印的问题 讨论一下,我认为c#最关键要掌握的几项技术 (急切求助)窗体大小、出现位置及对话框重叠问题? 两个问题,1参数如何实现多态,2如何使用参数实现批量INSERT或UPDATE socket 服务端为什么会随客户端关闭需关闭? 关于PropertyGrid的定制 GDI+中如何设置映射模式啊? Socket客户端连接多个服务器端 winform一个窗体控制多个独立的进程 在c#中调用用delphi和vb写的dll的问题。编译能通过,但运行出错。 不存在命名空间名称 请教软件架构问题
这样可以"先得到整个XML,再解析里面的数据"?
<fc iii=555 />
<fc iii=666 />
你用dataset:
DataSet ds = w.getSupportDataSet()
string st = dt.Tables["fc"].Rows[1]["iii"].ToString();
http://blog.csdn.net/wind_cloud2011/article/details/18255557
我这个返回的是一个对象数组,Webservices我是不可以修改的,怎么用Dataset?转换类型?
PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2");
SELECT * FROM patient WHERE id in (#{pVo}) --pVO是我传的参数。
不知道能不能在调用getPatientID之前,先解析为xml?有什么方法?
http://www.2cto.com/kf/201307/226970.html
只能通过.net调用它。
private int id;
private String s_account_id;
private String chinese_given_name;
private String chinese_sur_name;
private String given_name;
private String sur_name;
private String nickname;
private int sex_id;
private int address_id;
private String pfullName;
private String patient_no;
private String tel_home;
private String tel_mobile;
private String tel_office;
private String phone;
private String date_created;
private Integer encounter_id;
private int recordsPerPage = 0;
private int totalRecords = 0;
private Integer rowFrom=null;
private Integer rowThru=null;
private int pageNumber = 0;
private List list = null;
private String address_district;
private String address_street;
private String address_area;
private Date dob;
private String order = null;
private String orderBy = null;
private String ordering = null;
s = paClient.getPatientID("1,2");
这样就取得webservice 返回的数组
s[0]就对应id
s[1]对应s_account_id
PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2");
foreach (WebServicePatientVo m in paID)
{
messagebox.show(m.id);
messagebox.show(m.s_account_id);
}
可你在 PatientService.WebServicePatientVo[] paID = paClient.getPatientID("1,2");这句子就出错了,总觉得参数写得不对
参数应该没错的吧,我试下传个无效的参数时返回null就没有报错,所以应该是拿到数据时有问题吧,不知道会不会是date类型.net与Java有差异?
日期格式太复杂,还是换成string
private Date dob;C#没这个
不知道C#有什么方式可以处理吗?
有没有什么方法能在getPatientID()获取数据前将这个方法解析为xml?
就无法读取数据了,如果能读取数据,转换就可阿
另外我也试过用Visual studio自带的命令行工具,把Java Webservices自动生成一个类,添加到项目中,在调用类,还是报错。
或者还有什么其他方式调用Java Webservices?能够在调用方法前就转换date类型?
找到引用的Webservices中Reference.cs文件,修改date类型为Object类型如下:
//private System.Nullable<System.DateTime> dobField; //原来的
private object dobField; //现在的
找到下面方法一并修改,如下:
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 7)] //DataType="date",
public object dob {
get {
return this.dobField;
}
set {
this.dobField = value;
this.RaisePropertyChanged("dob");
}
}但是还有问题,我在Windows Phone 8中用同样方法修改,还是报错,不知道为什么?
在Windows Phone 8是同样的错误?
windows Phone 8中错误如下:
“System.ServiceModel.FaultException”类型的异常在 System.ServiceModel.ni.dll 中发生,但未在用户代码中进行处理
但是觉得应该是同样的错误,因为我试着传个无效的参数,可以返回null,不会报错,所以猜测可能还是Date类型错误。
但是没明白为什么Object类型就不行,难道是因为Java中没有Object类型的问题?