WCF DataMember DateTime序列化格式

时间:2012-02-22 19:43:02

标签: json wcf datetime serialization

我有一个有效的WCF服务,它使用JSON作为RequestFormat和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; 

}

MyClassB类的myDateTime属性是DateTime类型。这被序列化为以下格式:“myDateTime”:“/ Date(1329919837509 + 0100)/”

我需要与之通信的客户端无法处理此格式。它需要它是一个更传统的格式,例如:yyyy-MM-dd hh:mm:ss

是否可以将其添加到DataMember属性?像这样:

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

提前致谢!

2 个答案:

答案 0 :(得分:5)

以下是已经检查过的答案的示例......

[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; }
}

上面的类定义了两个处理UpdateStartDate的方法。一个包含可空的DateTime属性,另一个包含DateTime?到我服务的JSon响应的字符串。

答案 1 :(得分:2)

为什么不把它作为已经格式化的字符串传递?

也就是说,不要将DataContract中的日期作为日期传递。改为使该成员成为字符串,并按照客户想要的方式格式化字符串。