我正在使用svcutil.exe从WSDL生成C#SOAP Web服务代理。
WSDL中的某些字段的类型为xs:datetime,并返回带有时区信息的日期时间。
因此,我希望代理对这些字段使用DateTimeOffset。
根据svcutil.exe documentation,它应该足以指定/tcv:Version35
参数,以便它生成DateTimeOffset字段而不是C#代理中的DateTime字段。
但事实并非如此。添加public class SpecificCountryScholorshipsFragment extends Fragment {
OKHttpRequest okHttpRequest = new OKHttpRequest();
ArrayList<ScholorshipsModel> arrayList;
ListView list
/***********************************************************************************/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
try {
String getResponse = okHttpRequest.doGetRequest("http://192.168.100.7/scholar/web/app.php/scholarship");
if (getResponse != null) {
//Toast.makeText(getActivity(), getResponse, Toast.LENGTH_LONG).show();
JSONArray jArray = new JSONArray(getResponse);
for (int i = 0; i < jArray.length(); i++) {
JSONObject jRealObject = jArray.getJSONObject(i);
ScholorshipsModel model = new ScholorshipsModel();
model.setScholorship_name(jRealObject.getString("name"));
model.setScholorship_detail(jRealObject.getString("details"));
model.setScholorship_pic(jRealObject.getString("picture"));
arrayList.add(model);
setAdapterValue();
}
}
View view = inflater.inflate(R.layout.scholorship_listing_main, container, false);
list = (ListView) view.findViewById(R.id.Scholorshiplist);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getActivity(), "List is clicked ", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getActivity(), ScholorshipDetailActivity.class);
getActivity().startActivity(intent);
}
});
return view;
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/***********************************************************************************/
private void setAdapterValue() {
ScholorshipAdapter adapter = new ScholorshipAdapter(getActivity(), R.layout.scholorship_listing, arrayList);
list.setAdapter(adapter);
}
}
参数时没有变化。它仍然在C#代理中为WSDL中的xs:datetime字段生成DateTime类型的字段。
如何让它生成DateTimeOffset类型的字段?
答案 0 :(得分:0)
添加“/ targetClientVersion:Version35”对我有用。你能验证你没有使用旧版本的svcutil.exe吗?我的版本位于“Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ SvcUtil.exe”中。
另外,请记住向数据协定类添加“[KnownType(typeof(DateTimeOffset)]]”,因为DateTimeOffset不是DataContractSerializer已知的默认类型(ref https://msdn.microsoft.com/en-us/library/ms730167(v=vs.110).aspx),