【发布时间】:2017-08-10 20:52:56
【问题描述】:
这是我关于 SO 的第一篇文章,如果我没有提供足够的信息,请原谅我。我有一个 WPF 应用程序试图向我的 WCF Web 服务发送一个包含 DateTime 属性的 EmployeeLogin 对象,并且在调用此 EmployeeLogIn() 方法时我不断收到 400 错误请求错误。我已经搜索了很多地方以寻找答案,但我无法直接回答我的具体情况。
所以我的主要问题是:发送具有DateTime 属性的对象是否会自动转换为 JSON 格式 (\/Date(1237951967000)\/) 并被 wcf 服务接受为有效的@ 987654327@属性,还是将其转换为上述JSON字符串并作为字符串传递给方法?
EDITv2:我的 WPF 应用程序没有以上述正确格式发送此 DateTime 对象,而是将其作为 "2017-08-11T13:47:55.2187627-04:00" 发送,我无法找到将其转换为正确 DateTime 格式的方法。我可以将它作为字符串转换成这种格式,但出于本文末尾所述的原因,这将是最后的努力。
EmployeeLogin EmpLogin = new EmployeeLogin { EmployeeID = (int)UserName, Password = Pass, Latitude = 33.45, Longitude = 134.44, TimeIn = DateTime.Now }; HttpResponseMessage response = await Client.PostAsJsonAsync(string.Format(@"{0}{1}", URL, method), EmpLogin);
其中 EmployeeLogin 定义如下:
[DataContract] public class EmployeeLogin { [DataMember] public int EmployeeID { get; set; } [DataMember] public string Password { get; set; } [DataMember] public DateTime TimeIn { get; set; } [DataMember] public Nullable<double> Latitude { get; set; } [DataMember] public Nullable<double> Longitude { get; set; } }
EmployeeLogIn 方法签名如下:
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedResponse)] [return: MessageParameter(Name = "Data")] [OperationContract] List<int> EmployeeLogIn(EmployeeLogin e);
我知道最简单的解决方案是将DateTime 更改为string 属性并将其转换回Web 服务端的DateTime,但我试图不对Web 服务进行任何更改除非绝对必要。提前谢谢你。
【问题讨论】:
-
如果您想知道 WCF 如何序列化和反序列化 DateTime,请编写一个返回 DateTime 的 WCF 端点。使用 Fiddler 或其等效工具来检查响应。 Fiddler(或其等价物)还可以帮助您准确了解
PostAsJsonAsync如何序列化您的 DateTime。 -
感谢您的回复,
PostAsJsonAsync肯定是根据 Fiddler 错误地格式化了DateTime:{"EmployeeID":6,"Password":"6490","TimeIn":"2017-08-11T13:47:55.2187627-04:00","Latitude":33.45,"Longitude":134.44}那么如何将DateTime转换为正确的格式? -
我终于想通了!链接帖子中问题的答案完美地解释了这个问题,并提供了一个对我来说同样完美的解决方案:stackoverflow.com/questions/33072965/…