C # में JSON फाइल कैसे लिखें?


146

मुझे C # में JSON फॉर्मेट का उपयोग करके निम्नलिखित डेटा को एक टेक्स्ट फ़ाइल में लिखना होगा। कोष्ठक JSON प्रारूप को मान्य करने के लिए महत्वपूर्ण हैं।

[
  {
    "Id": 1,
    "SSN": 123,
    "Message": "whatever"

  },
  {
   "Id": 2,
    "SSN": 125,
    "Message": "whatever"
  }
]

यहाँ मेरा मॉडल वर्ग है:

public class data
{
    public int Id { get; set; }
    public int SSN { get; set; }
    public string Message { get; set;}
}

जवाबों:


276

मैं Json.Net की सिफारिश करूंगा , नीचे उदाहरण देखें:

List<data> _data = new List<data>();
_data.Add(new data()
{
    Id = 1,
    SSN = 2,
    Message = "A Message"
});

string json = JsonConvert.SerializeObject(_data.ToArray());

//write string to file
System.IO.File.WriteAllText(@"D:\path.txt", json);

या उपरोक्त कोड का थोड़ा और अधिक कुशल संस्करण (बफर के रूप में एक स्ट्रिंग का उपयोग नहीं करता है):

//open file stream
using (StreamWriter file = File.CreateText(@"D:\path.txt"))
{
     JsonSerializer serializer = new JsonSerializer();
     //serialize object directly into file stream
     serializer.Serialize(file, _data);
}

दस्तावेज़ीकरण: JSON को किसी फ़ाइल में सीरियल करें


क्यों? यहाँ आम धारावाहिकों के साथ-साथ बेंचमार्क परीक्षणों Here's common के बीच एक सुविधा की तुलना की गई है

नीचे दिए गए लेख से लिए गए प्रदर्शन का एक ग्राफ है:

यहां छवि विवरण दर्ज करें

इस अलग पोस्ट में कहा गया है कि:

Json.NET हमेशा मेमोरी कुशल रहा है, बड़े दस्तावेज़ों को पूरी तरह से मेमोरी में लोड करने के बजाय रीडिंग और राइटिंग को स्ट्रीम करता है, लेकिन मैं कुछ ऐसे महत्वपूर्ण स्थानों को खोजने में सक्षम था जहाँ ऑब्जेक्ट एलोकेशन को कम किया जा सकता है ...... (अब) Json.Net (6.0) JavaScriptSerializer से आबंटित करता है 8 बार कम स्मृति


.Net Core 3.0 से अपडेट करें

इसे लिखने के बाद से ब्लॉक पर एक नया बच्चा System.Text.Jsonजो .Net Core 3.0 में जोड़ा गया है। Microsoft यह दावा करता है कि यह कैसे, अब, Newtonsoft से बेहतर है । जिसमें यह शामिल है कि यह न्यूटनसॉफ्ट से तेज है । जैसा कि ऊपर, मैं इस अपने आप को परीक्षण करने के लिए आप सलाह देंगे

† बेंचमार्क Json.Net 5 प्रतीत होता है, वर्तमान संस्करण (लिखने पर) 10. मानक .Net धारावाहिकों के किस संस्करण का उपयोग किया गया है, इसका उल्लेख नहीं किया गया है।

Library ये परीक्षण स्पष्ट रूप से उन डेवलपर्स से हैं जो पुस्तकालय का रखरखाव करते हैं। मैंने उनके दावों का सत्यापन नहीं किया है । यदि संदेह है तो स्वयं उनका परीक्षण करें।


1
JSON.NET, वर्ग JavaScriptSerializerऔर DataContractJsonSerializerवर्गों द्वारा प्रदान किए गए अंतर्निहित समर्थन से कैसे भिन्न होगा ?
रॉबर्ट हार्वे

2
@RobertHarvey लियाम के Json.Net लिंक में एक अच्छी तालिका है जो दिखाती है कि अंतर क्या हैं। इसे बनाने वाले लोगों से, बेशक आपको इसे नमक के दाने के साथ लेना चाहिए, लेकिन यह वास्तव में अंतर्निहित चीजों से बेहतर है।
टिम एस।

1
हाँ मुझे बार-बार फ़ाइल में संलग्न होने की आवश्यकता है, लेकिन उन्हें एक ही सरणी में होना चाहिए
user1429595

1
उस स्थिति में आपको फ़ाइल पढ़ने की आवश्यकता होगी, इसे ऑब्जेक्ट्स में पार्स करें, ऑब्जेक्ट्स में जोड़ें, फिर इसे फिर से पार्स करें।
लियाम

4
@ ड्रू नोक यदि आप किसी फ़ाइल को पहले मेमोरी में डाले बिना लिखना चाहते हैं, तो JSON.NET james.newtonking.com/archive/2009/02/14/…/
gcoleman0828

62

लियाम के जवाब में उदाहरण एकल पंक्ति में फ़ाइल को स्ट्रिंग के रूप में सहेजता है। मैं स्वरूपण जोड़ना पसंद करता हूं। भविष्य में कोई व्यक्ति फ़ाइल में मैन्युअल रूप से कुछ मान बदलना चाहेगा। यदि आप स्वरूपण जोड़ते हैं तो ऐसा करना आसान है।

निम्नलिखित मूल JSON इंडेंटेशन जोड़ता है:

 string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);


4
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.