दिलचस्प पोस्ट
एंड्रॉइड में क्रियाएँ के अंदर बीजी संगीत बजाना क्या समवर्ती हैशैप मूल्यों को सुरक्षित करता है? `% में%` और `==` में अंतर क्या मैं .Net 3.5 परियोजना में कार्य समानांतर पुस्तकालय का उपयोग कर सकता हूं? मैं वर्तमान लाइन संख्या कैसे प्राप्त करूं? कैसे: matplotlib के साथ ticks की संख्या को कम स्क्रॉलव्यू स्क्रॉल के अंदर एंड्रॉइड वेबव्यू केवल स्क्रॉलएव्यू @ManyToMany हाइबरनेट अतिरिक्त तालिका में अतिरिक्त क्षेत्र (एस) जोड़ सकते हैं? सूचि धागे-सुरक्षित हैं Serializable क्या मतलब है? नमस्ते सरणी के लिए सबसे कुशल संपत्ति हैश सी #% AppData% के पथ को प्राप्त करना सी ++ डेटा संरेखण / सदस्य आदेश और विरासत एक यूनिक्स टाइमस्टैम्प को जावास्क्रिप्ट में समय के लिए परिवर्तित करें जेली बीन पर READ_LOGS अनुमति (एपीआई 16)

सी # का उपयोग करते हुए मैं .NET में स्वरूपित JSON कैसे प्राप्त करूं?

मैं .NET JSON पार्सर का उपयोग कर रहा हूं और मेरी कॉन्फ़िग फाइल को सीरियल करना चाहता हूं ताकि यह पठनीय हो। इसके बजाय:

{"blah":"v", "blah2":"v2"} 

मुझे अच्छा लगता है जैसे:

 { "blah":"v", "blah2":"v2" } 

मेरा कोड ऐसा कुछ है:

 using System.Web.Script.Serialization; var ser = new JavaScriptSerializer(); configSz = ser.Serialize(config); using (var f = (TextWriter)File.CreateText(configFn)) { f.WriteLine(configSz); f.Close(); } 

वेब के समाधान से एकत्रित समाधान "सी # का उपयोग करते हुए मैं .NET में स्वरूपित JSON कैसे प्राप्त करूं?"

आपको JavaScriptSerializer के साथ यह पूरा करने में एक कठिन समय होगा।

JSON.Net को आज़माएं

JSON.Net उदाहरण से मामूली संशोधनों के साथ

 using System; using Newtonsoft.Json; namespace JsonPrettyPrint { internal class Program { private static void Main(string[] args) { Product product = new Product { Name = "Apple", Expiry = new DateTime(2008, 12, 28), Price = 3.99M, Sizes = new[] { "Small", "Medium", "Large" } }; string json = JsonConvert.SerializeObject(product, Formatting.Indented); Console.WriteLine(json); Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json); } } internal class Product { public String[] Sizes { get; set; } public decimal Price { get; set; } public DateTime Expiry { get; set; } public string Name { get; set; } } } 

परिणाम

 { "Sizes": [ "Small", "Medium", "Large" ], "Price": 3.99, "Expiry": "\/Date(1230447600000-0700)\/", "Name": "Apple" } 

प्रलेखन: एक ऑब्जेक्ट सीरियल करें

Json.Net लाइब्रेरी के लिए छोटा नमूना कोड

 private static string FormatJson(string json) { dynamic parsedJson = JsonConvert.DeserializeObject(json); return JsonConvert.SerializeObject(parsedJson, Formatting.Indented); } 

यदि आपके पास एक JSON स्ट्रिंग है और इसे "आकर्षक बनाना" चाहते हैं, लेकिन इसे किसी ज्ञात C # प्रकार से क्रमबद्ध नहीं करना चाहते हैं, तो निम्न चाल (JSON.NET का उपयोग करके) करता है:

 using System; using System.IO; using Newtonsoft.Json; class JsonUtil { public static string JsonPrettify(string json) { using (var stringReader = new StringReader(json)) using (var stringWriter = new StringWriter()) { var jsonReader = new JsonTextReader(stringReader); var jsonWriter = new JsonTextWriter(stringWriter) { Formatting = Formatting.Indented }; jsonWriter.WriteToken(jsonReader); return stringWriter.ToString(); } } } 

मौजूदा JSON को ढंकने के लिए सबसे छोटा संस्करण : (संपादित करें: JSON.net का उपयोग कर)

 JToken.Parse("mystring").ToString() 

इनपुट:

 {"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }} 

आउटपुट:

 { "menu": { "id": "file", "value": "File", "popup": { "menuitem": [ { "value": "New", "onclick": "CreateNewDoc()" }, { "value": "Open", "onclick": "OpenDoc()" }, { "value": "Close", "onclick": "CloseDoc()" } ] } } } 

ऑब्जेक्ट को सुंदर प्रिंट करने के लिए :

 JToken.FromObject(myObject).ToString() 

स्वरूपित जेसन के लिए आप निम्न मानक विधि का उपयोग कर सकते हैं

जेसनरेडरवर्टरफ्रन्ट्री.क्रेटजेसन वाइटर (स्ट्रीम स्ट्रीम, एन्कोडिंग एन्कोडिंग, बूल का मालिक है स्ट्रीम, बूल इंडेंट, स्ट्रिंग इंडेंट चेर्स)

केवल "इंडेंट == सत्य" सेट करें

ऐसा कुछ करने की कोशिश करो

  public readonly DataContractJsonSerializerSettings Settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true }; public void Keep<TValue>(TValue item, string path) { try { using (var stream = File.Open(path, FileMode.Create)) { var currentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; try { using (var writer = JsonReaderWriterFactory.CreateJsonWriter( stream, Encoding.UTF8, true, true, " ")) { var serializer = new DataContractJsonSerializer(type, Settings); serializer.WriteObject(writer, item); writer.Flush(); } } catch (Exception exception) { Debug.WriteLine(exception.ToString()); } finally { Thread.CurrentThread.CurrentCulture = currentCulture; } } } catch (Exception exception) { Debug.WriteLine(exception.ToString()); } } 

लाइनों पर आपका ध्यान दें

  var currentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; .... Thread.CurrentThread.CurrentCulture = currentCulture; 

विभिन्न क्षेत्रीय सेटिंग्स के साथ कंप्यूटर पर deserialization के दौरान अपवाद से बचने के लिए आपको इन्विरियंटकल्चर का उपयोग करना चाहिए। उदाहरण के लिए, डबल या डेटटाइम का अमान्य स्वरूप कभी-कभी उन्हें कारण देते हैं।

Deserializing के लिए

  public TValue Revive<TValue>(string path, params object[] constructorArgs) { try { using (var stream = File.OpenRead(path)) { var currentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; try { var serializer = new DataContractJsonSerializer(type, Settings); var item = (TValue) serializer.ReadObject(stream); if (Equals(item, null)) throw new Exception(); return item; } catch (Exception exception) { Debug.WriteLine(exception.ToString()); return (TValue) Activator.CreateInstance(type, constructorArgs); } finally { Thread.CurrentThread.CurrentCulture = currentCulture; } } } catch { return (TValue) Activator.CreateInstance(typeof (TValue), constructorArgs); } } 

धन्यवाद!

सबसे पहले मैं डंकन स्मार्ट पोस्ट के तहत टिप्पणी जोड़ना चाहता था, लेकिन दुर्भाग्य से मुझे अभी तक टिप्पणी छोड़ने के लिए पर्याप्त प्रतिष्ठा नहीं मिली है। तो मैं इसे यहाँ कोशिश करूंगा।

मैं सिर्फ साइड इफेक्ट्स के बारे में चेतावनी देना चाहता हूं

JsonTextReader आंतरिक रूप से JSON टाइप किए गए JTokens में पार्स करता है और फिर उन्हें वापस क्रमबद्ध करता है।

उदाहरण के लिए यदि आपका मूल JSON था

  { "double":0.00002, "date":"\/Date(1198908717056)\/"} 

सुंदरता के बाद आप मिल

 { "double":2E-05, "date": "2007-12-29T06:11:57.056Z" } 

बेशक दोनों json स्ट्रिंग समकक्ष हैं और संरचनात्मक रूप से समान ऑब्जेक्ट्स को डिसेरीलाइज़ करते हैं, लेकिन यदि आपको मूल स्ट्रिंग मानों को संरक्षित करने की आवश्यकता है, तो आपको इसे संवेदीकरण में लेना होगा