WCF错误参数日期等于“ 01/01/0001”

时间:2018-09-13 03:24:56

标签: wcf

我目前正在从SoapUI发送以下测试请求:

<caja:GenerarObligacion>
  <caja:Obligacion>
    <obl:BenCheq>TALLERES ARROYO</obl:BenCheq>
    <obl:CodMoneda>S/.</obl:CodMoneda>
    <obl:CodProd>VM14</obl:CodProd>
    <obl:CodRamo>AUTO</obl:CodRamo>
    <obl:CodUsuario>ACSELP</obl:CodUsuario>
    <obl:DptoEmi>000101</obl:DptoEmi>
    <obl:FecFinVig>2024-02-28T12:00:01</obl:FecFinVig>
    <obl:FecIniVig>2025-02-28T12:00:01</obl:FecIniVig>
    <obl:FecMod>2026-07-17T13:02:05</obl:FecMod>
    <obl:FecNotif>2026-07-17T13:02:05</obl:FecNotif>
    <obl:FecOcurr>2025-01-28T08:41:53</obl:FecOcurr>
    <obl:FecRecepDocPago>2025-01-28T00:00:00</obl:FecRecepDocPago>
    <obl:IdePol>25000293961</obl:IdePol>
    <obl:IdeSin>1500013900</obl:IdeSin>
    <obl:IndCheque>S</obl:IndCheque>
    <obl:ItemOblig>
      <fac:BEDetalleObligacion>
        <fac:CodCpto>DSCTOS</fac:CodCpto>
        <fac:ItemDoc/>
        <fac:FecFact>2025-01-28T00:00:00</fac:FecFact>
        <fac:MtoCptoEgre>600.0</fac:MtoCptoEgre>
        <fac:NroFact>444444444</fac:NroFact>
        <fac:NumCpto>1</fac:NumCpto>
        <fac:SerieFact>f045</fac:SerieFact>
        <fac:TipoRegCompra>01</fac:TipoRegCompra>
      </fac:BEDetalleObligacion>
      <fac:BEDetalleObligacion>
        <fac:CodCpto>ISLV</fac:CodCpto>
        <fac:ItemDoc/>
        <fac:FecFact>2025-01-28T00:00:00</fac:FecFact>
        <fac:MtoCptoEgre>108.0</fac:MtoCptoEgre>
        <fac:NroFact>444444444</fac:NroFact>
        <fac:NumCpto>2</fac:NumCpto>
        <fac:SerieFact>f045</fac:SerieFact>
        <fac:TipoRegCompra>01</fac:TipoRegCompra>
      </fac:BEDetalleObligacion>
    </obl:ItemOblig>
    <obl:MtoAprob>708.0</obl:MtoAprob>
    <obl:NumAprob>18000493</obl:NumAprob>
    <obl:NumPol>2500029396</obl:NumPol>
    <obl:StsOblig>VAL</obl:StsOblig>
    <obl:StsSin>ACT</obl:StsSin>
    <obl:TasaCambio>1.0</obl:TasaCambio>
    <obl:TipoAprob>P</obl:TipoAprob>
    <obl:TipoBenef>TALR</obl:TipoBenef>
    <obl:TipoDocPago>CHQ</obl:TipoDocPago>
  </caja:Obligacion>
  <caja:Tercero>
    <ter:BETercero>
      <ter:NumId>650606871</ter:NumId>
      <ter:TipoId>J</ter:TipoId>
    </ter:BETercero>
  </caja:Tercero>
</caja:GenerarObligacion>

除“ FecFact”字段外,所有数据均正常到达,如具有日期的请求字段中所示,但在进行可视调试时,将显示以下值“ 01/01/0001”:

image1

尽管将值发送到FecFact字段,但仍使用图像“ 01/01/0001”中显示的日期进行设置,就好像该字段将变为空。这是我的实体的声明。

[DataMember]
public String CodCtpo { get; set; }
[DataMember]
public DateTime FecFact { get; set; }
[DataMember]  //IndIGV
public String IndnoGravado { get; set; }
[DataMember] //MtoCptoAprob
public Decimal MtoCptoEgre { get; set; }
[DataMember] // NumCpto - ?uso?   NUMDETOBLIG
public Int32 NumCpto { get; set; }
[DataMember]
public String NroFact { get; set; }
[DataMember]
public String SerieFact { get; set; }
[DataMember]
public String TipoRegCompra { get; set; } //Funcional como OB
[DataMember]
public String CodSvcio { get; set; }

2 个答案:

答案 0 :(得分:0)

DateTime默认情况下由DateTime.MinValue初始化,实际上与您所获得的1/1/0001 12:00:00 AM完全相同。

如果想要空日期,则应声明可空字段,例如:

DateTime? dt = null;

OR

DateTime变量与DateTime.MinValue进行比较,并将数据库查询中的相应值设置为null或将UI变量中的相应值设置为null。

答案 1 :(得分:0)

根据您的描述,我已成功恢复您的问题, 您唯一需要做的就是尝试将NameSpace属性分配给DataContract类。

    [DataContract(Namespace ="mydomain")]
    public class Product
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public DateTime dateTime { get; set; }
     }

我希望这些信息有用。