Формат сериализации даты и времени WCF DataMember - PullRequest
6 голосов
/ 22 февраля 2012

У меня есть работающий сервис 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; 

}

Свойство myDateTime класса MyClassB имеет тип DateTime. Это сериализовано в следующий формат: "myDateTime": "/ Date (1329919837509 + 0100) /"

Клиент, с которым мне нужно общаться, не может работать с этим форматом. Требуется, чтобы это был более обычный формат, например, например: гггг-мм-дд чч: мм: сс

Возможно ли как-то добавить это в атрибут DataMember? Вот так:

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

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 09 марта 2015

Вот пример уже проверенного ответа ...

[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 от моего сервиса.

3 голосов
/ 23 февраля 2012

Почему бы просто не передать ее как уже отформатированную строку?

То есть, не передавайте дату в вашем DataContract как дату. Вместо этого сделайте этот член строкой и отформатируйте строку так, как этого хочет ваш клиент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...