2012-02-22 16 views
5

मेरे पास एक कामकाजी डब्ल्यूसीएफ सेवा है जो 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 प्रॉपर्टी डेटटाइम प्रकार है। "MyDateTime":: यह निम्न स्वरूप को धारावाहिक की जा रही है "/ तिथि (1329919837509 + 0100) /"

ग्राहक मैं के साथ संवाद करने के लिए इस प्रारूप के साथ सौदा नहीं कर सकते हैं की जरूरत है। इसे उदाहरण के लिए एक और पारंपरिक प्रारूप होना आवश्यक है: yyyy-MM-dd hh: mm: ss

क्या यह डेटामैम्बर विशेषता में इसे जोड़ना संभव है? इस तरह:

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

अग्रिम धन्यवाद!

+0

क्या आपको कोई समाधान मिला? एकमात्र तरीका मैंने किया था, यह एक कड़वा कामकाज था, http://stackoverflow.com/questions/25894068/change-the-json-datetime-serialization-in-wcf-4-0-rest-service – bpeikes

+0

इसके अलावा कोई वास्तविक समाधान नहीं नीचे दिए गए टैड डोनघे द्वारा वर्णित वर्कअराउंड, जो आप जिस बात का जिक्र कर रहे हैं उसके समान नीचे आता है: टाइप स्ट्रिंग का एक अतिरिक्त डेटामैम्बर जोड़ें। शायद आपको टैड के जवाब को संपादित करना चाहिए और पूर्णता के लिए अपना उदाहरण जोड़ना चाहिए। – Brabbeldas

+0

हाँ, मैंने डब्ल्यूसीएफ और सीरियलाइजेशन के लिए एमएस संदर्भ कोड देखा है और यह अपठनीय है। इसमें कोई आश्चर्य की बात नहीं है कि ऐसा लगता है कि उन्होंने डब्लूसीएफ पर आरईएसटी को छोड़ दिया है। – bpeikes

उत्तर

2

क्यों न केवल इसे पहले से स्वरूपित स्ट्रिंग के रूप में पास करें?

यही है, तिथि के रूप में अपने डेटाकंट्रैक्ट में तिथि को पास न करें। उस सदस्य को इसके बजाय एक स्ट्रिंग बनाएं, और उस स्ट्रिंग को प्रारूपित करें जिस तरह से आपका क्लाइंट इसे चाहता है।

+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 को संभालने के लिए परिभाषित करता है। एक जिसमें निरर्थक डेटटाइम संपत्ति है, और दूसरा डेटटाइम को परिवर्तित करता है? मेरी सेवा से जेएसओएन प्रतिक्रिया के लिए एक स्ट्रिंग के लिए।

संबंधित मुद्दे