svcutil.exe没有为xs:datetime生成DateTimeOffset

时间:2016-12-13 07:51:53

标签: wcf soap wsdl timezone svcutil.exe

我正在使用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类型的字段?

1 个答案:

答案 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),