.NET Framework
JSON सीरियल
खोज…
टिप्पणियों
जावास्क्रिप्ट बनाम Json.NET बनाम
JavaScriptSerializer
वर्ग को .NET 3.5 में पेश किया गया था और इसे AJAX- सक्षम अनुप्रयोगों के लिए .NET की अतुल्यकालिक संचार परत द्वारा आंतरिक रूप से उपयोग किया जाता है। इसका उपयोग JSON के साथ प्रबंधित कोड में काम करने के लिए किया जा सकता है।
JavaScriptSerializer
वर्ग के अस्तित्व के बावजूद, Microsoft क्रमांकन और डीरिएलाइज़ेशन के लिए ओपन सोर्स Json.NET लाइब्रेरी का उपयोग करने की सलाह देता है। Json.NET प्रदान करता है बेहतर प्रदर्शन और कस्टम वर्गों के लिए JSON मानचित्रण (एक कस्टम के लिए एक दोस्ताना इंटरफ़ेस JavaScriptConverter
वस्तु के साथ एक ही पूरा करने के लिए की जरूरत होगी JavaScriptSerializer
)।
System.Web.Script.Serialization.JavaScriptSerializer का उपयोग करके देशीकरण
JavaScriptSerializer.Deserialize<T>(input)
विधि मान्य JSON की एक स्ट्रिंग को निर्दिष्ट प्रकार <T>
ऑब्जेक्ट <T>
ऑब्जेक्ट में बदलने की कोशिश करती है, जो JavaScriptSerializer
द्वारा मूल रूप से समर्थित डिफ़ॉल्ट मैपिंग का उपयोग करती है।
using System.Collections;
using System.Web.Script.Serialization;
// ...
string rawJSON = "{\"Name\":\"Fibonacci Sequence\",\"Numbers\":[0, 1, 1, 2, 3, 5, 8, 13]}";
JavaScriptSerializer JSS = new JavaScriptSerializer();
Dictionary<string, object> parsedObj = JSS.Deserialize<Dictionary<string, object>>(rawJSON);
string name = parsedObj["Name"].toString();
ArrayList numbers = (ArrayList)parsedObj["Numbers"]
नोट: JavaScriptSerializer
ऑब्जेक्ट को .NET संस्करण 3.5 में पेश किया गया था
Json.NET का उपयोग करते हुए Deserialization
internal class Sequence{
public string Name;
public List<int> Numbers;
}
// ...
string rawJSON = "{\"Name\":\"Fibonacci Sequence\",\"Numbers\":[0, 1, 1, 2, 3, 5, 8, 13]}";
Sequence sequence = JsonConvert.DeserializeObject<Sequence>(rawJSON);
अधिक जानकारी के लिए, Json.NET आधिकारिक साइट देखें ।
नोट: Json.NET .NET संस्करण 2 और उच्चतर का समर्थन करता है।
Json.NET का उपयोग करके सीरियलाइज़ेशन
[JsonObject("person")]
public class Person
{
[JsonProperty("name")]
public string PersonName { get; set; }
[JsonProperty("age")]
public int PersonAge { get; set; }
[JsonIgnore]
public string Address { get; set; }
}
Person person = new Person { PersonName = "Andrius", PersonAge = 99, Address = "Some address" };
string rawJson = JsonConvert.SerializeObject(person);
Console.WriteLine(rawJson); // {"name":"Andrius","age":99}
ध्यान दें कि कैसे गुणों (और वर्गों) को परिणामी जोंस स्ट्रिंग में उनकी उपस्थिति को बदलने के लिए या उन्हें जसोन स्ट्रिंग से हटाने के लिए विशेषताओं के साथ सजाया जा सकता है (JsonIgnore)।
Json.NET क्रमांकन विशेषताओं के बारे में अधिक जानकारी यहाँ पाई जा सकती है ।
C # में, सार्वजनिक पहचानकर्ता सम्मेलन द्वारा पास्कलकेस में लिखे गए हैं। JSON में, सभी नामों के लिए कैमलकेस का उपयोग करने के लिए सम्मेलन है। आप दोनों के बीच कनवर्ट करने के लिए एक अनुबंध रिज़ॉल्वर का उपयोग कर सकते हैं।
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
[JsonIgnore]
public string Address { get; set; }
}
public void ToJson() {
Person person = new Person { Name = "Andrius", Age = 99, Address = "Some address" };
var resolver = new CamelCasePropertyNamesContractResolver();
var settings = new JsonSerializerSettings { ContractResolver = resolver };
string json = JsonConvert.SerializeObject(person, settings);
Console.WriteLine(json); // {"name":"Andrius","age":99}
}
Newtonsoft.Json का उपयोग करके क्रमिकरण-विचलन
अन्य सहायकों के विपरीत, यह क्रमबद्ध और अस्वाभाविक रूप से स्थिर वर्ग के सहायकों का उपयोग करता है, इसलिए यह दूसरों की तुलना में थोड़ा आसान है।
using Newtonsoft.Json;
var rawJSON = "{\"Name\":\"Fibonacci Sequence\",\"Numbers\":[0, 1, 1, 2, 3, 5, 8, 13]}";
var fibo = JsonConvert.DeserializeObject<Dictionary<string, object>>(rawJSON);
var rawJSON2 = JsonConvert.SerializeObject(fibo);
गतिशील बंधन
Newtonsoft का Json.NET आपको स्पष्ट रूप से प्रकार बनाने की आवश्यकता के बिना गतिशील रूप से (विस्तारकऑब्जेक्ट / डायनामिक ऑब्जेक्ट्स का उपयोग करके) json को बांधने की अनुमति देता है।
क्रमबद्धता
dynamic jsonObject = new ExpandoObject();
jsonObject.Title = "Merchent of Venice";
jsonObject.Author = "William Shakespeare";
Console.WriteLine(JsonConvert.SerializeObject(jsonObject));
डी-क्रमबद्धता
var rawJson = "{\"Name\":\"Fibonacci Sequence\",\"Numbers\":[0, 1, 1, 2, 3, 5, 8, 13]}";
dynamic parsedJson = JObject.Parse(rawJson);
Console.WriteLine("Name: " + parsedJson.Name);
Console.WriteLine("Name: " + parsedJson.Numbers.Length);
ध्यान दें कि rawJson ऑब्जेक्ट में कुंजियों को डायनामिक ऑब्जेक्ट में सदस्य चर में बदल दिया गया है।
यह उन मामलों में उपयोगी है जहां कोई एप्लिकेशन JSON के विभिन्न स्वरूपों को स्वीकार / निर्मित कर सकता है। हालांकि यह सुझाव दिया जाता है कि धारावाहिक / डी-क्रमांकन के परिणामस्वरूप जेनसन स्ट्रिंग के लिए सत्यापन के अतिरिक्त स्तर या उत्पन्न गतिशील वस्तु का उपयोग किया जाए।
JsonSerializerSettings के साथ Json.NET का उपयोग करके सीरियलाइज़ेशन
इस धारावाहिक में कुछ अच्छी विशेषताएं हैं जो डिफ़ॉल्ट .net json JsonSerializerSettings
पास नहीं है, जैसे नल मान हैंडलिंग, आपको केवल JsonSerializerSettings
बनाने की JsonSerializerSettings
:
public static string Serialize(T obj)
{
string result = JsonConvert.SerializeObject(obj, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
return result;
}
.Net में एक और गंभीर सीरियल इश्यू सेल्फ रेफरेंसिंग लूप है। एक छात्र के पाठ्यक्रम में नामांकित होने की स्थिति में, उसके उदाहरण में एक पाठ्यक्रम संपत्ति होती है और एक पाठ्यक्रम में छात्रों का एक संग्रह होता है, जिसका अर्थ है एक List<Student>
जो संदर्भ लूप बनाएगा। आप इसे JsonSerializerSettings
संभाल सकते हैं:
public static string Serialize(T obj)
{
string result = JsonConvert.SerializeObject(obj, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore});
return result;
}
आप इस तरह के विभिन्न क्रमांकन विकल्प रख सकते हैं:
public static string Serialize(T obj)
{
string result = JsonConvert.SerializeObject(obj, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ReferenceLoopHandling = ReferenceLoopHandling.Ignore});
return result;
}