2012-02-22 11 views
5

私は、RequestFormatとResponseFormatとしてJSONを使用している実用的なWCFサービスを持っています。WCF DataMember DateTimeシリアライズフォーマット

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

ありがとうございます!

+0

解決策を見つけましたか?私がそれをした唯一の方法は、kludgeの回避策でした、http://stackoverflow.com/questions/25894068/change-the-json-datetime-serialization-in-wcf-4-0-rest-service – bpeikes

+0

以下のtadで説明されている回避策は、あなたが参照しているのと同じものになります。文字列型の追加のdatamemberを追加します。たぶん、あなたはお父さんの答えを編集し、あなたの例を追加して完成させるべきでしょう。 – Brabbeldas

+0

ええと、私はWCFとシリアライゼーションのためのMS参照コードを見てきました。それは読めません。彼らがWCFの上でRESTをダンプしたように見えるのは不思議ではありません。 – bpeikes

答えて

2

なぜ、すでにフォーマットされた文字列として渡すだけではないのですか?

つまり、DataContractの日付を日付として渡さないでください。そのメンバを代わりに文字列にして、クライアントが望むように文字列を書式設定します。ここで

+0

あなたは何を意味するのか教えてください。 – Brabbeldas

+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を処理するための2つのメソッドを定義します。 1つは、null可能なDateTimeプロパティを含み、もう1つはDateTimeを変換しますか?私のサービスからのJSon応答の文字列に変換します。

関連する問題