【问题标题】:Nullable<DateTime> always null in WCF service?Nullable<DateTime> 在 WCF 服务中始终为空?
【发布时间】:2014-02-20 10:34:14
【问题描述】:

我有一个 WCF 合同,其中包含 3 个 DateTime? 参数。在我的页面上,我使用 jquery 来传递一个包含这 3 个日期的 javascript 对象。当 javascript 不为空时,服务仍将其接收为空。它们有时确实需要为 Nullable,所以我不能直接删除它。

C#:

public class Search {
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public int? OrderID { get; set; }
    public DateTime? From { get; set; }
    public DateTime? To { get; set; }
}

JS:

var search = {};
search.FirstName = $('#SearchFirst').val() || null;
search.LastName = $('#SearchLast').val() || null;
search.DateOfBirth = $('#SearchDOB').val() || null;
search.From = after;
search.To = before;
search.OrderID = null;

$.ajax({
    url: url,
    dataType: "json",
    data: search,
    async: true,
    cache: false,
    success: function (data) {
        $('#SearchLoading').hide();
        DisplaySearchResults(data);
    },
    type: "Post"
});

我正在使用一些测试值,例如new Date('10/14/2013') 用于beforenew Date('10/15/2013') 用于after

Fiddler 报告 POST 正文如下所示:

FirstName=&LastName=&DateOfBirth=&From=Mon+Oct+14+00%3A00%3A00+MDT+2013&To=Tue+Oct+15+00%3A00%3A00+MDT+2013

FirstNameLastName 等其他字段正在正常通过。目前,OrderID 将始终为空,但日期全部为空,没有警告或错误。我能做什么?

【问题讨论】:

  • 我看到您的 AJAX 调用中没有 contentType: 'application/json;',;这可能是问题吗?
  • @rae1 如果他用正确的 RequestFormat 属性修饰了他的 OperationContract,那么他不需要显式设置它。我认为这可能与 DateTime 转换不可接受的日期格式有关。
  • @crush 它只需要是一个日期,而不是一个完整的日期时间。我应该如何为服务构造一个字符串以作为没有时间的日期?
  • @CoreyOgburn 我尝试找出所有可接受的格式可以由 JSON DataContractSerializer 自动转换,但我还没有找到任何东西。我知道 DateTime.parse 需要 MM/DD/YYYY 中的字符串,但它也可能支持其他格式;此外,我什至不确定它是否用于 JSON 序列化。我只会听从对序列化过程有更深入了解的人。
  • 您也可以在传递日期时尝试使用 toUTCString() 方法。例如:search.From = start.toUTCString()

标签: c# javascript wcf


【解决方案1】:

看起来像格式问题..您可以在将Date.prototype.toISOString() 函数发送到服务器之前使用它吗?

这是一个documentation,如果你想让它在>IE9浏览器上运行,你可以extend it作为例子。

您还可以配置message logging 以查看有关请求的更多详细信息

<messageLogging 
       logEntireMessage="true" 
       logMalformedMessages="true" 
       logMessagesAtServiceLevel="true" 
       logMessagesAtTransportLevel="true" /> 

-D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2019-03-02
    • 2018-05-05
    • 2016-06-15
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多