2013-08-12 5 views
22

मैं वस्तु उदाहरणों से सीधे दिनांक समय मूल्यों को क्रमानुसार करने (फ़ॉर्मेटर साथ DateTime.ToString() का उपयोग नहीं) JSON.NET उपयोग कर रहा हूँ serializing मिलीसेकेंड शामिल करने के लिए।फोर्स JSON.NET जब दिनांक समय (भले ही एमएस घटक शून्य है)

वहाँ क्रमबद्धता भले ही दिनांक समय की मिलीसेकंड घटक शून्य है में मिलीसेकेंड शामिल करने के लिए मजबूर करने के लिए JSON.NET कोई तरीका है?

पृष्ठभूमि: मैं इस JSON endpoint के लिए एक बहुत धीमी गति से वेब सेवा उपभोक्ता है। उपभोक्ता के लिए सशर्त तर्क महंगा है, इसलिए मैं हर बार एक ही डेटा स्वरूपण प्रदान करना चाहता हूं।

+1

यह परिस्थितियों है कि आप अपने प्रदर्शन कोड के साथ इस – spender

उत्तर

34

हम अपने मौजूदा परियोजना पर यह एक ही मुद्दे में भाग गया। हम एक आरईएसटी एपीआई लागू करने के लिए वेब एपीआई (और इसलिए JSON.Net) का उपयोग कर रहे हैं। हमने पाया कि, DateTime ऑब्जेक्ट्स को क्रमबद्ध करते समय, JSON.Net मिलीसेकंड से पीछे वाले शून्य को छोड़ देता है, या शून्य से पूरी तरह से मिलीसेकंड को छोड़ देता है। हमारे ग्राहक मिलीसेकंड के लिए बिल्कुल 3 अंक के साथ एक निश्चित-लंबाई दिनांक-समय स्ट्रिंग की अपेक्षा कर रहे थे। तो जैसा कि ऊपर दिखाया

JsonSerializerSettings settings = HttpConfiguration.Formatters.JsonFormatter.SerializerSettings; 
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter 
{ 
    DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'" 
}; 
settings.Converters.Add(dateConverter); 

आप वेब एपीआई उपयोग नहीं कर रहे हैं, तो आप JsonSerializerSettings का एक नया उदाहरण बनाने के द्वारा एक ही बात कर सकते हैं, यह करने के लिए IsoDateTimeConverter जोड़ने,: हम Application_Start() में निम्नलिखित कार्य करके यह तय धारावाहिक सेटिंग्स को JsonConvert.SerializeObject() पर पास करना।

नोट: यदि आप एक DateTimeOffset या एक स्थानीय DateTime serializing रहे हैं और आप समय क्षेत्र ऑफसेट शामिल करना चाहते हैं, तो एक गैर उद्धृत K के साथ उद्धृत 'Z' ऊपर प्रारूप में बदल दें। अधिक जानकारी के लिए प्रलेखन में Custom Date and Time Format Strings देखें।

+0

आपका दृष्टिकोण करना चाहते करने के लिए नेतृत्व के समूह की व्याख्या करने में एक अच्छा विचार वास्तव में पार्स करने के लिए 153ms एक के बारे में में रहता है हो सकता है। ऐसा लगता है कि प्रदर्शन बहुत महत्वपूर्ण है, इसलिए मैं इसे लाता हूं। वे कहते हैं कि एक व्यक्ति लगभग 200ms के बाद देरी को नोटिस करता है, इसलिए आप नेटवर्क उपयोग, डेटाबेस एक्सेस इत्यादि के लिए केवल 43ms शेष खाते हैं, –

+3

मेरा उत्तर बस JSON.Net को कैसे प्राप्त करें के बारे में ओपी के प्रश्न को संबोधित करने का प्रयास करता है स्वरूपण तिथियों के दौरान हमेशा मिलीसेकंड शामिल करें। यह किसी भी प्रकार का प्रदर्शन दावा नहीं करता है। –

+0

हाँ यह ठीक है, मैं केवल ऐसी जानकारी जोड़ रहा हूं जो ओपी या बाद में किसी के साथ मदद कर सके। –

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