WCF DataMember DateTime Serializing Format

16,380

Solution 1

Why not just pass it as an already formatted string?

That is, don't pass the date in your DataContract as a date. Make that member a string instead, and format the string the way your client it wants it.

Solution 2

Here's an example of the already checked answer...

[DataContract]
public class ProductExport
{
    [DataMember]
    public Guid ExportID { get; set; }

    [DataMember( EmitDefaultValue = false, Name = "updateStartDate" )]
    public string UpdateStartDateStr
    {
        get
        {
            if( this.UpdateStartDate.HasValue )
                return this.UpdateStartDate.Value.ToUniversalTime().ToString( "s", CultureInfo.InvariantCulture );
            else
                return null;
        }
        set
        {
            // should implement this...
        }
    }

    // this property is not transformed to JSon. Basically hidden
    public DateTime? UpdateStartDate { get; set; }

    [DataMember]
    public ExportStatus Status { get; set; }
}

The class above defines two methods to handle the UpdateStartDate. One that contains the nullable DateTime property, and the other convert the DateTime? to a string for the JSon response from my service.

Share:
16,380
Brabbeldas
Author by

Brabbeldas

Updated on June 15, 2022

Comments

  • Brabbeldas
    Brabbeldas almost 2 years

    I have a working WCF service which used JSON as its RequestFormat and ResponseFormat.

    [ServiceContract]     
    public interface IServiceJSON 
    { 
    
        [OperationContract]   
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
        MyClassA echo(MyClassA oMyObject); 
    
    } 
    
    [DataContract] 
    public class MyClassA 
    { 
        [DataMember] 
        public string message; 
    
        [DataMember] 
        public List<MyClassB> myList; 
    
        public MyClassA() 
        { 
            myList = new List<MyClassB>(); 
        } 
    } 
    
    [DataContract] 
    public class MyClassB 
    { 
        [DataMember] 
        public int myInt; 
    
        [DataMember] 
        public double myDouble; 
    
        [DataMember] 
        public bool myBool; 
    
        [DataMember] 
        public DateTime myDateTime; 
    
    }
    

    The myDateTime property of class MyClassB is of type DateTime. This is being serialized to the following format: "myDateTime":"/Date(1329919837509+0100)/"

    The client I need to communicate with can not deal with this format. It requires it to be a more conventional format like for example: yyyy-MM-dd hh:mm:ss

    Is it somehow possible to add this to the DataMember attribute? Like so:

    [DataMember format = “yyyy-MM-dd hh:mm:ss”] 
    public DateTime myDateTime;
    

    Thanks in advance!

  • Brabbeldas
    Brabbeldas about 12 years
    Could you please explain what you mean?