【问题标题】:Passing Datetime from JSON to WCF POST将日期时间从 JSON 传递到 WCF POST
【发布时间】:2017-03-30 09:52:29
【问题描述】:

我有这样的课:

public class BudgetTransactionRequest
    {
        [DataMember]
        public string transaction_code { get; set; }
        [DataMember]
        public double? amount { get; set; }



        public DateTime request_date { get; set; }

        [DataMember(Name = "request_date")]
        public string req_date { get; set; }

        [OnSerializing]
        void OnSerializing(StreamingContext context)
        {
            this.req_date = this.request_date.ToString("MM/dd/yyyy h:mm tt", CultureInfo.InvariantCulture);
        }

        [OnDeserialized]
        void OnDeserialized(StreamingContext context)
        {
            DateTime value;
            if (DateTime.TryParseExact(this.req_date, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out value))
            {
                this.request_date = value;
            }
        }
}

使用 fiddler,我尝试通过发送如下 JSON 来调用此 Web 服务:

{"transaction_code":"MCN34", "amount":2000.000,"request_date":"/Date(1235764800000)/"}

但我收到以下错误:

{"ErrorDetails":"DateTime is less than minumum value supported by CrmDateTime. Actual value: 01\/01\/0001 00:00:00, Minimum value supported: 01\/01\/1753 00:00:00\"}

我在这里错过了什么?

【问题讨论】:

  • 我认为您的问题是您声明了一个名为 request_date 的 public 变量,因此活页夹尝试设置两个属性:request_date 和 req_date(由于 DataMember(Name = "request_date")].出于测试目的,只需将public DateTime request_date { get; set; } 更改为public DateTime request_date_test { get; set; } 它应该可以正常工作。
  • @Rumpelstinsk:不幸的是,它不起作用。还有其他想法吗?

标签: c# json wcf datetime


【解决方案1】:

我用你的类实现了一个方法,它工作得很好。 这是我的方法:

[OperationContract]
[WebInvoke(Method = "*", UriTemplate = @"/BudgetTransaction")]
[Description("use this method to add an Employee Account")]
BudgetTransactionRequest BudgetTransaction(BudgetTransactionRequest ws);

我对 Fiddler 的要求:

POST localhost/BudgetTransaction HTTP/1.1
User-Agent: Fiddler
Content-Length: 86
Content-Type: application/json

{"transaction_code":"MCN34", "amount":2000.000,"request_date":"/Date(1235764800000)/"}

回复:

{"amount":2000,"req_date":"02\/27\/2009 8:00 PM","request_date":"\/Date(1235764800000)\/","transaction_code":"MCN34"}

【讨论】:

  • 嗨,我发现问题出在变量名上。就像 rumpel 说的那样。我更改了 Datetime Request_date 的名称。并将 [Datamember] 放在其上方。而不是上面的字符串 req_date
【解决方案2】:

您的代码有点错误。 您将 req_date 声明为 [DataMember(Name = "request_date")] public string req_date { get; set; } 如果您将 request_date 作为 "request_date":"/Date(1235764800000)/" 发送,则日期值将存储在 req_date 变量中。 然后,您尝试将 request_date 分配给 req_date。默认情况下, request_date 变量中的 Null 值。 如果您传递 NULL 值意味着,它将采用默认值作为 '01/01/0001 00:00:00'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2012-09-14
    • 2011-07-28
    • 2012-05-01
    • 2017-10-08
    相关资源
    最近更新 更多