C # में JSON स्ट्रिंग कैसे बनाएं


238

मैंने अभी एक HTTP प्रतिक्रिया में वापस भेजने के लिए कुछ XML बनाने के लिए XmlWriter का उपयोग किया है। आप एक JSON स्ट्रिंग कैसे बनाएंगे। मुझे लगता है कि आप सिर्फ JSON स्ट्रिंग बनाने के लिए एक स्ट्रिंगर का उपयोग करेंगे और वे JSON के रूप में आपकी प्रतिक्रिया को प्रारूपित करेंगे?


इस 3 तरीकों से डेटा को कन्वर्ट करें JSON String को Asp.net C # codepedia.info/2015/07/…
singh

जवाबों:


249

आप JavaScriptSerializer वर्ग का उपयोग कर सकते हैं , एक उपयोगी एक्सटेंशन विधि बनाने के लिए इस लेख की जाँच करें

लेख से कोड:

namespace ExtensionMethods
{
    public static class JSONHelper
    {
        public static string ToJSON(this object obj)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(obj);
        }

        public static string ToJSON(this object obj, int recursionDepth)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            serializer.RecursionLimit = recursionDepth;
            return serializer.Serialize(obj);
        }
    }
}

उपयोग:

using ExtensionMethods;

...

List<Person> people = new List<Person>{
                   new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"},
                   new Person{ID = 2, FirstName = "Bill", LastName = "Gates"}
                   };


string jsonString = people.ToJSON();

हाँ, केवल यह जानने की कोशिश कर रहा है कि पहले JSON टेक्स्ट कैसे बनता है। साभार
पॉजिटिव

क्या होगा अगर आप .NET 3.5 का उपयोग नहीं कर रहे हैं! दा **
पॉजिटिव

2
यदि आप इसे .NET 2.0 से उपयोग करना चाहते हैं, तो JavaScriptSerializer ASP.NET Ajax 1.0 का हिस्सा है।
जो चुंग

2
आप अभी भी इसका उपयोग कर सकते हैं। ASP.NET 2.0 AJAX एक्सटेंशन 1.0 का अपना हिस्सा: asp.net/AJAX/Documentation/Live/mref/…
नरेन

हमारा प्रोजेक्ट वीएस 2008 में खुल सकता है ... इसलिए इसे किसी बिंदु पर परिवर्तित किया गया था। क्या इसका मतलब है कि अब हम अपने मौजूदा कोडबेस में .NET 3.5 का उपयोग कर सकते हैं?
पॉजिटिव

366

Newtonsoft.Json का उपयोग करना वास्तव में आसान बनाता है:

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string json = JsonConvert.SerializeObject(product);

प्रलेखन: सीरियल और वर्णन करना JSON


8
MS अब VS MVC4 प्रोजेक्ट टेम्प्लेट में मानक के रूप में NewtonSoft को शिप करता है
क्रिस एफ कैरोल

45
जरूरत पड़ने पर आप गुमनाम वस्तुओं को भी अनुक्रमित कर सकते हैं string json = JsonConvert.SerializeObject(new { "PropertyA" = obj.PropertyA });:।
मैट बेकमैन

9
@MattBeckman मुझे "अवैध अनाम प्रकार के सदस्य घोषणाकर्ता मिलते हैं। अनाम प्रकार के सदस्यों को सदस्य असाइनमेंट, सरल नाम या सदस्य पहुंच के साथ घोषित किया जाना चाहिए। क्या नहीं "PropertyA"होना चाहिए PropertyA?
योना

इसलिए हमें एक साधारण जसन के निर्माण के लिए, एक कक्षा और वस्तुओं को लागू करने की आवश्यकता है! नेस्टेड की कल्पना करें - निश्चित सरणियाँ नहीं - तत्व। मैं देख नहीं सकता कि हवा में इतना उत्साह क्यों है!
वासिलिस

6
@MattBeckman @ जोना string json = JsonConvert.SerializeObject(new { PropertyA = obj.PropertyA });बिना दोहरे उद्धरण के हैPropertyA.
जोस

18

यह लाइब्रेरी C # से JSON के लिए बहुत अच्छी है

http://james.newtonking.com/pages/json-net.aspx


1
मैं पूछता हूं, इस रूपरेखा का उपयोग करने के क्या लाभ हैं?
पॉजिटिव

1
आपको जसन पर बारीक बारीकियों की अनुमति देता है। उदाहरण के लिए आप nulls को शामिल करने के लिए निर्दिष्ट कर सकते हैं या नहीं
redsquare

17

Simlpe का उपयोग Newtonsoft.Json और Newtonsoft.Json.Linq पुस्तकालयों।

        //Create my object
        var my_jsondata = new
        {
            Host = @"sftp.myhost.gr",
            UserName = "my_username",
            Password = "my_password",
            SourceDir = "/export/zip/mypath/",
            FileName = "my_file.zip"
        };

        //Tranform it to Json object
        string json_data = JsonConvert.SerializeObject(my_jsondata);

        //Print the Json object
        Console.WriteLine(json_data);

        //Parse the json object
        JObject json_object = JObject.Parse(json_data);

        //Print the parsed Json object
        Console.WriteLine((string)json_object["Host"]);
        Console.WriteLine((string)json_object["UserName"]);
        Console.WriteLine((string)json_object["Password"]);
        Console.WriteLine((string)json_object["SourceDir"]);
        Console.WriteLine((string)json_object["FileName"]);

सरल और आसान। धन्यवाद।
QMaster

13

यह कोड स्निपेट .NET 3.5 में System.Runtime.Serialization.Json से DataContractJsonSerializer का उपयोग करता है।

public static string ToJson<T>(/* this */ T value, Encoding encoding)
{
    var serializer = new DataContractJsonSerializer(typeof(T));

    using (var stream = new MemoryStream())
    {
        using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding))
        {
            serializer.WriteObject(writer, value);
        }

        return encoding.GetString(stream.ToArray());
    }
}

3
तो ... वास्तव में इस स्निपेट को काम करने के लिए 'इस' संदर्भ को अनइंस्टॉल करें। यदि आपने पहले एक्सटेंशन विधियों के साथ काम नहीं किया है, तो यह स्पष्ट नहीं हो सकता है।
डैन एस्परज़ा

7

Json-net.aspx प्रोजेक्ट के लिए http://www.codeplex.com/json/ पर एक नज़र डालें । पहिया का फिर से आविष्कार क्यों?


3
निर्भर करता है, मैं सिर्फ JSON बनाने के लिए एक 3 पार्टी ओपन सोर्स प्लगइन पर भरोसा नहीं करना चाहता हो सकता है। बल्कि स्वयं स्ट्रिंग / हेल्पर विधि का निर्माण करेगा।
पॉजिटिव

7

आप मेरा ServiceStack JsonSerializer भी आज़मा सकते हैं यह इस समय का सबसे तेज़ .NET JSON धारावाहिक है । यह क्रमबद्ध DataContracts, किसी भी POCO प्रकार, इंटरफेस, अनाम प्रकार सहित देर से बाध्य वस्तुओं आदि का समर्थन करता है।

मूल उदाहरण

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json); 

नोट: यदि आप प्रदर्शन के लिए महत्वपूर्ण नहीं हैं, तो केवल माइक्रोसॉफ़्ट जावास्क्रिप्टस्लीयराइज़र का उपयोग करें क्योंकि मुझे अपने बेंचमार्क से बाहर निकलना पड़ा है क्योंकि अन्य JSON धारावाहिकों की तुलना में यह 40x-100x धीमा है।


मैंने JsonSerializer.SerializeToString को वस्तुओं की एक सूची के साथ आज़माया और यह केवल खाली json लौटा: "[{}, {}]" pastebin.com/yEw57L3T यहाँ मेरा ऑब्जेक्ट कैसा दिखता है इससे पहले कि SerializeToString i.imgur.com/dYIE7J1.png पर कॉल करें यहाँ पर शीर्ष मतदान के जवाब ने काम किया, हालांकि जो मुझे उम्मीद थी वह लौट आया: pastebin.com/aAtB3Gxu
मैथ्यू लॉक

सबसे तेज। NET JSON सीरीयलर लिंक मृत है।

6

यदि आपको जटिल परिणाम की आवश्यकता है (एम्बेडेड) अपनी खुद की संरचना बनाएं:

class templateRequest
{
    public String[] registration_ids;
    public Data data;
    public class Data
    {
        public String message;
        public String tickerText;
        public String contentTitle;
        public Data(String message, String tickerText, string contentTitle)
        {
            this.message = message;
            this.tickerText = tickerText;
            this.contentTitle = contentTitle;
        }                
    };
}

और फिर आप कॉलिंग के साथ JSON स्ट्रिंग प्राप्त कर सकते हैं

List<String> ids = new List<string>() { "id1", "id2" };
templateRequest request = new templeteRequest();
request.registration_ids = ids.ToArray();
request.data = new templateRequest.Data("Your message", "Your ticker", "Your content");

string json = new JavaScriptSerializer().Serialize(request);

परिणाम इस प्रकार होगा:

json = "{\"registration_ids\":[\"id1\",\"id2\"],\"data\":{\"message\":\"Your message\",\"tickerText\":\"Your ticket\",\"contentTitle\":\"Your content\"}}"

आशा करता हूँ की ये काम करेगा!


5

यदि आप JSON के धारावाहिकों ( JavaScriptSerializer और DataContractJsonSerializer ) में दो बिल्ट-इन का उपयोग नहीं करना चाहते हैं या नहीं कर सकते हैं, तो आप JsonExSerializer लाइब्रेरी को आज़मा सकते हैं - मैं इसे कई परियोजनाओं और कार्यों में अच्छी तरह से उपयोग करता हूं।


1
मैंने जावास्क्रिप्ट सर्वर की कोशिश की है और यह अशक्त वस्तुओं के साथ अच्छी तरह से काम नहीं करता है।
ल्यूक

1
@ ल्यूक101: बिल्कुल कैसे? मेरा मतलब है कि मैं इसे हर रोज उपयोग करता हूं और कभी भी समस्या नहीं थी, इसलिए मैं ईमानदारी से उत्सुक हूं! (कोई विडंबना नहीं है, मैं वास्तव में उत्सुक हूं क्योंकि मैंने कभी भी समस्याओं का सामना नहीं किया है)
तमस सीजेन

2

यदि आप JSON पर एक वेब पेज पर डेटा की सेवा के लिए एक वेब सेवा बनाने की कोशिश कर रहे हैं, तो ASP.NET Ajax टूलकिट का उपयोग करने पर विचार करें:

http://www.asp.net/learn/ajax/tutorial-05-cs.aspx

यह स्वचालित रूप से आपकी वस्तुओं को एक webservice पर कार्य करने के लिए json में बदल देगा, और प्रॉक्सी वर्ग बना सकता है जिसे आप इसे कनेक्ट करने के लिए उपयोग कर सकते हैं।


यह सिर्फ एक .ashx के लिए एक कॉल होगा जो JSON का एक स्ट्रिंग लौटाएगा। सबसे पहले, मैं सिर्फ यह जानने की कोशिश कर रहा हूं कि स्ट्रिंग कैसे बनाई जाए..एक स्ट्रिंगरंग? दूसरा फिर हाँ, कैसे सीरीयस। जब एक्सएमएल लौटने तुम सिर्फ सेट करेंगे प्रतिक्रिया के सामग्री के टी टाइप मुझे लगता है कि: context.Response.ContentType = "text / xml"
PositiveGuy

1

DataContractJSONSerializer XmlSerializer रूप में एक ही आसान के साथ आप के लिए सब कुछ करना होगा। एक वेब ऐप में इसका उपयोग करने के लिए इसका तुच्छ। यदि आप WCF का उपयोग कर रहे हैं, तो आप एक विशेषता के साथ इसका उपयोग निर्दिष्ट कर सकते हैं। DataContractSerializer परिवार भी बहुत तेज़ है।


1

मैंने पाया है कि आपको धारावाहिक की आवश्यकता नहीं है। यदि आप सूची के रूप में वस्तु वापस करते हैं। मुझे एक उदाहरण का उपयोग करने दें।

हमारे asmx में हम उस चर का उपयोग करके डेटा प्राप्त करते हैं जिसे हम साथ में पारित करते हैं

// return data
[WebMethod(CacheDuration = 180)]
public List<latlon> GetData(int id) 
{
    var data = from p in db.property 
               where p.id == id 
               select new latlon
               {
                   lat = p.lat,
                   lon = p.lon

               };
    return data.ToList();
}

public class latlon
{
    public string lat { get; set; }
    public string lon { get; set; }
}

फिर jquery का उपयोग करके हम उस चर के साथ गुजरते हुए, सेवा तक पहुँच प्राप्त करते हैं।

// get latlon
function getlatlon(propertyid) {
var mydata;

$.ajax({
    url: "getData.asmx/GetLatLon",
    type: "POST",
    data: "{'id': '" + propertyid + "'}",
    async: false,
    contentType: "application/json;",
    dataType: "json",
    success: function (data, textStatus, jqXHR) { //
        mydata = data;
    },
    error: function (xmlHttpRequest, textStatus, errorThrown) {
        console.log(xmlHttpRequest.responseText);
        console.log(textStatus);
        console.log(errorThrown);
    }
});
return mydata;
}

// call the function with your data
latlondata = getlatlon(id);

और हमें अपनी प्रतिक्रिया मिलती है।

{"d":[{"__type":"MapData+latlon","lat":"40.7031420","lon":"-80.6047970}]}

url: "getData.asmx / GetLatLon", जैसा कि मुझे आपके सर्वर साइड कोड में GetLatLon विधि की अपेक्षा है। लेकिन वहाँ नहीं है।
लाली

1

उपयोग सांकेतिक शब्दों में बदलना

JSON Array EncodeJsObjectArray () के लिए सरल ऑब्जेक्ट

public class dummyObject
{
    public string fake { get; set; }
    public int id { get; set; }

    public dummyObject()
    {
        fake = "dummy";
        id = 5;
    }

    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append('[');
        sb.Append(id);
        sb.Append(',');
        sb.Append(JSONEncoders.EncodeJsString(fake));
        sb.Append(']');

        return sb.ToString();
    }
}

dummyObject[] dummys = new dummyObject[2];
dummys[0] = new dummyObject();
dummys[1] = new dummyObject();

dummys[0].fake = "mike";
dummys[0].id = 29;

string result = JSONEncoders.EncodeJsObjectArray(dummys);

परिणाम: [[२ ९, "माइक"], [५, "डमी"]]

सुंदर उपयोग

सुंदर प्रिंट JSON Array PrettyPrintJson () स्ट्रिंग एक्सटेंशन विधि

string input = "[14,4,[14,\"data\"],[[5,\"10.186.122.15\"],[6,\"10.186.122.16\"]]]";
string result = input.PrettyPrintJson();

परिणाम है:

[
   14,
   4,
   [
      14,
      "data"
   ],
   [
      [
         5,
         "10.186.122.15"
      ],
      [
         6,
         "10.186.122.16"
      ]
   ]
]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.