2013-06-04 5 views
85

हाय मुझे सी # में जेसन प्रारूप का उपयोग करके निम्न डेटा को टेक्स्ट फ़ाइल में लिखना होगा? कोष्ठक वैध 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;} 

} 

उत्तर

148

है मैं 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); 
} 

प्रलेखन: Serialize JSON to a file


क्यों? यहां एक feature comparision between common serialisers as well as benchmark tests † ‡ है। ,

Json.NET हमेशा स्मृति कुशल किया गया है पढ़ने स्ट्रीमिंग और:

enter image description here

यह seperate post, कहा गया है कि:

नीचे प्रदर्शन का ग्राफ जुड़ा हुआ लेख से ली गई है उन्हें पूरी तरह से स्मृति में लोड करने के बजाय बड़े दस्तावेज़ लिखना, लेकिन मैं कुछ प्रमुख स्थानों को खोजने में सक्षम था जहां ऑब्जेक्ट आवंटन को कम किया जा सकता था ...... (अब) Json.Net (6.0) JavaScriptSerializer

‡ से अधिक 8 गुना कम स्मृति आवंटित करता है।

† मानक Json.Net 5, वर्तमान संस्करण (लेखन पर) प्रतीत 10 है मानक नेट इस्तेमाल किया serialisers के किन संस्करणों

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

+1

JSON कैसे करता है।एनईटी 'जावास्क्रिप्टसेरियलाइज़र' और 'डेटाकंट्रैक्टजसनसेरियलज़र' कक्षाओं द्वारा प्रदान किए गए अंतर्निहित समर्थन से भिन्न है? –

+0

@RobertHarvey मुझे इसका उपयोग करना आसान और अधिक मजबूत लगता है। मेरा मानना ​​है कि माइक्रोसॉफ्ट सहमत है क्योंकि मुझे लगता है कि वे इसे कोर सिस्टम में लागू करने की योजना बना रहे हैं। मुझे यह भी विश्वास है कि यह बहुत तेज़ है। मैंने इसे वापस करने के लिए कहीं कुछ आंकड़े देखे हैं लेकिन मेरे पास इस समय हाथ नहीं है। – Liam

+0

और यह तारीखों को बेहतर तरीके से लागू करता है, http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

6

वहाँ JavaScriptSerializer Class का उपयोग कर इस के लिए कार्यक्षमता में बनाया गया है:

var json = JavaScriptSerializer.Serialize(data); 
37

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

निम्नलिखित बुनियादी JSON खरोज जोड़ता है:

string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented); 
2
var responseData = //Fetch Data 
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None); 
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData); 
संबंधित मुद्दे