आइए कोड का निम्नलिखित नमूना टुकड़ा मान लें:

[<Literal>]
let jsonSample =
   """
   {
      "TimeInterval": {
          "Start" : "2010-01-01",
          "End"   : "2010-01-02"
      }
   }
   """

type MyJson = JsonProvider<jsonSample>

TypeProvider सफलतापूर्वक दिनांक समय के लिए फ़ील्ड के प्रकार की पहचान करता है, हालांकि यह स्वचालित रूप से "DateTimeKind" फ़ील्ड को "स्थानीय" पर सेट करता है। नतीजतन, मेरा कोड उस मशीन पर निर्भर हो जाता है जिस पर वह चल रहा है और विंडोज सेटिंग्स में टाइमज़ोन सेट है।

जब मैं निम्नलिखित रिकॉर्ड को गोल करने का प्रयास करता हूं:

{ "TimeInterval": { "Start" : "2010-01-01", "End" : "2010-01-02" } }

और मेरी मशीन "यूरोप/बर्न +1" पर सेट है, मैं क्रमांकन समाप्त करता हूं

{ "TimeInterval": { "Start" : "2010-01-01T00:00:00000+01:00", "End" : "2010-01-02T00:00:00000+01:00" } }

क्या मैं इस व्यवहार को बदल सकता हूं और टाइप प्रोवाइडर को डेटटाइम के "दयालु" फ़ील्ड "अनिर्दिष्ट" को छोड़ने का निर्देश दे सकता हूं?

संपादित करें:

मैं इसके द्वारा राउंडट्रिप करता हूं:

let json = MyJson.Parse inFilePath
use outputStream = new StreamWriter(outFilePath, false)
outputStream.WriteLine (json.JsonValue.ToString())
json.JsonValue.ToString()
4
Alojzy Leszcz 22 जुलाई 2020, 18:34

1 उत्तर

सबसे बढ़िया उत्तर

मुझे नहीं लगता कि JSON प्रकार प्रदाता में समय क्षेत्र प्रबंधन को कॉन्फ़िगर करने का कोई तरीका है। यह हमेशा एक बुरा सपना होता है, इससे कोई फर्क नहीं पड़ता कि आप इसे कैसे संभालते हैं, इसलिए मुझे लगता है कि हमें इसके लिए बहुत सारे पैरामीटर जोड़ने होंगे ताकि लोग वह सब कुछ कर सकें जो उन्हें करने की आवश्यकता हो सकती है।

दुर्भाग्य से, मेरी सिफारिश सिर्फ नमूना बदलने की होगी ताकि आपको मूल्य string के रूप में प्राप्त हो। इसका मतलब यह होगा कि आपको तारीख का प्रबंधन खुद करना होगा, लेकिन इसे राउंड-ट्रिपिंग समस्या को ठीक करना चाहिए।

[<Literal>]
let jsonSample =
   """
   {
      "TimeInterval": {
          "Start" : "handling dates is pain / 2010-01-01",
          "End"   : "handling dates is pain / 2010-01-02"
      }
   }
   """
1
Tomas Petricek 22 जुलाई 2020, 22:47