मैं.NET में एक JSON स्ट्रिंग में C#ऑब्जेक्ट कैसे चालू करूं?




serialization (10)

मेरे पास इस तरह की कक्षाएं हैं:

class MyDate
{
    int year, month, day;
}

class Lad
{
    string firstName;
    string lastName;
    MyDate dateOfBirth;
}

और मैं एक Lad ऑब्जेक्ट को JSON स्ट्रिंग में इस तरह चालू करना चाहता हूं:

{
    "firstName":"Markoff",
    "lastName":"Chaney",
    "dateOfBirth":
    {
        "year":"1901",
        "month":"4",
        "day":"30"
    }
}

(प्रारूपण के बिना)। मुझे यह लिंक मिला, लेकिन यह एक नामस्थान का उपयोग करता है जो .NET 4 में नहीं है। मैंने JSON.NET बारे में भी सुना है, लेकिन उनकी साइट इस समय नीचे प्रतीत होती है, और मैं बाहरी DLL फ़ाइलों का उपयोग करने के लिए उत्सुक नहीं हूं। मैन्युअल रूप से JSON स्ट्रिंग लेखक बनाने के अलावा अन्य विकल्प भी हैं?


Wooou! एक JSON ढांचे का उपयोग कर वास्तव में बेहतर :)

Json.NET ( http://james.newtonking.com/json ) का उपयोग करके मेरा उदाहरण यहां दिया गया है:

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using System.IO;

namespace com.blogspot.jeanjmichel.jsontest.model
{
    public class Contact
    {
        private Int64 id;
        private String name;
        List<Address> addresses;

        public Int64 Id
        {
            set { this.id = value; }
            get { return this.id; }
        }

        public String Name
        {
            set { this.name = value; }
            get { return this.name; }
        }

        public List<Address> Addresses
        {
            set { this.addresses = value; }
            get { return this.addresses; }
        }

        public String ToJSONRepresentation()
        {
            StringBuilder sb = new StringBuilder();
            JsonWriter jw = new JsonTextWriter(new StringWriter(sb));

            jw.Formatting = Formatting.Indented;
            jw.WriteStartObject();
            jw.WritePropertyName("id");
            jw.WriteValue(this.Id);
            jw.WritePropertyName("name");
            jw.WriteValue(this.Name);

            jw.WritePropertyName("addresses");
            jw.WriteStartArray();

            int i;
            i = 0;

            for (i = 0; i < addresses.Count; i++)
            {
                jw.WriteStartObject();
                jw.WritePropertyName("id");
                jw.WriteValue(addresses[i].Id);
                jw.WritePropertyName("streetAddress");
                jw.WriteValue(addresses[i].StreetAddress);
                jw.WritePropertyName("complement");
                jw.WriteValue(addresses[i].Complement);
                jw.WritePropertyName("city");
                jw.WriteValue(addresses[i].City);
                jw.WritePropertyName("province");
                jw.WriteValue(addresses[i].Province);
                jw.WritePropertyName("country");
                jw.WriteValue(addresses[i].Country);
                jw.WritePropertyName("postalCode");
                jw.WriteValue(addresses[i].PostalCode);
                jw.WriteEndObject();
            }

            jw.WriteEndArray();

            jw.WriteEndObject();

            return sb.ToString();
        }

        public Contact()
        {
        }

        public Contact(Int64 id, String personName, List<Address> addresses)
        {
            this.id = id;
            this.name = personName;
            this.addresses = addresses;
        }

        public Contact(String JSONRepresentation)
        {
            //To do
        }
    }
}

कसौटी:

using System;
using System.Collections.Generic;
using com.blogspot.jeanjmichel.jsontest.model;

namespace com.blogspot.jeanjmichel.jsontest.main
{
    public class Program
    {
        static void Main(string[] args)
        {
            List<Address> addresses = new List<Address>();
            addresses.Add(new Address(1, "Rua Dr. Fernandes Coelho, 85", "15º andar", "São Paulo", "São Paulo", "Brazil", "05423040"));
            addresses.Add(new Address(2, "Avenida Senador Teotônio Vilela, 241", null, "São Paulo", "São Paulo", "Brazil", null));

            Contact contact = new Contact(1, "Ayrton Senna", addresses);

            Console.WriteLine(contact.ToJSONRepresentation());
            Console.ReadKey();
        }
    }
}

परिणाम:

{
  "id": 1,
  "name": "Ayrton Senna",
  "addresses": [
    {
      "id": 1,
      "streetAddress": "Rua Dr. Fernandes Coelho, 85",
      "complement": "15º andar",
      "city": "São Paulo",
      "province": "São Paulo",
      "country": "Brazil",
      "postalCode": "05423040"
    },
    {
      "id": 2,
      "streetAddress": "Avenida Senador Teotônio Vilela, 241",
      "complement": null,
      "city": "São Paulo",
      "province": "São Paulo",
      "country": "Brazil",
      "postalCode": null
    }
  ]
}

अब मैं कन्स्ट्रक्टर विधि को कार्यान्वित करूंगा जो एक JSON स्ट्रिंग प्राप्त करेगा और कक्षा के फ़ील्ड को पॉप्युलेट करेगा।


XML को JSON में कनवर्ट करने के लिए नीचे दिए गए कोड का उपयोग करें।

var json = new JavaScriptSerializer().Serialize(obj);

आप msdn.microsoft.com/en-us/library/… वर्ग का उपयोग कर सकते हैं ( System.Web.Extensions संदर्भ जोड़ें):

using System.Web.Script.Serialization;
var json = new JavaScriptSerializer().Serialize(obj);

एक पूर्ण उदाहरण:

using System;
using System.Web.Script.Serialization;

public class MyDate
{
    public int year;
    public int month;
    public int day;
}

public class Lad
{
    public string firstName;
    public string lastName;
    public MyDate dateOfBirth;
}

class Program
{
    static void Main()
    {
        var obj = new Lad
        {
            firstName = "Markoff",
            lastName = "Chaney",
            dateOfBirth = new MyDate
            {
                year = 1901,
                month = 4,
                day = 30
            }
        };
        var json = new JavaScriptSerializer().Serialize(obj);
        Console.WriteLine(json);
    }
}

इस तरह के रूप में आसान, गतिशील वस्तुओं के लिए भी काम करता है (प्रकार वस्तु):

string json = new
System.Web.Script.Serialization.JavaScriptSerializer().Serialize(MYOBJECT);

यदि आप एएसपी.नेट एमवीसी वेब नियंत्रक में हैं तो यह उतना आसान है जितना:

string ladAsJson = Json(Lad);

विश्वास नहीं कर सकता कि किसी ने इसका उल्लेख नहीं किया है।


यदि वे बहुत बड़े नहीं हैं, तो शायद आपका केस जेसन के रूप में इसे निर्यात करता है। इसके अलावा यह सभी plattforms के बीच पोर्टेबल बनाता है

 using Newtonsoft.Json;
     [TestMethod]
        public void ExportJson()
        {
        double[,] b = new double[,] {
            { 110, 120, 130, 140, 150 },
            { 1110, 1120, 1130, 1140, 1150 },
            { 1000, 1, 5 ,9, 1000},
            {1110, 2, 6 ,10,1110},
            {1220, 3, 7 ,11,1220},
            {1330, 4, 8 ,12,1330} };


        string jsonStr = JsonConvert.SerializeObject(b);

        Console.WriteLine(jsonStr);

        string path = "X:\\Programming\\workspaceEclipse\\PyTutorials\\src\\tensorflow_tutorials\\export.txt";

        File.WriteAllText(path, jsonStr);
    }

सी # कक्षा उत्पन्न करने के लिए इस उपकरण का उपयोग करें

और इस कोड का प्रयोग करें

 var json = new JavaScriptSerializer().Serialize(obj);

आपके ऑब्जेक्ट को क्रमबद्ध करने के लिए


Json.Net लाइब्रेरी का उपयोग करें, आप इसे Nuget पैकेट प्रबंधक से डाउनलोड कर सकते हैं।

जेसन स्ट्रिंग को सीरियल करना:

 var obj = new Lad
        {
            firstName = "Markoff",
            lastName = "Chaney",
            dateOfBirth = new MyDate
            {
                year = 1901,
                month = 4,
                day = 30
            }
        };

var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);

ऑब्जेक्ट को Deserializing:

var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Lad>(jsonString );

serializer

 public static void WriteToJsonFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
        var contentsToWriteToFile = JsonConvert.SerializeObject(objectToWrite, new JsonSerializerSettings
        {
            Formatting = Formatting.Indented,
        });
        using (var writer = new StreamWriter(filePath, append))
        {
            writer.Write(contentsToWriteToFile);
        }
}

वस्तु

namespace MyConfig
{
    public class AppConfigurationSettings
    {
        public AppConfigurationSettings()
        {
            /* initialize the object if you want to output a new document
             * for use as a template or default settings possibly when 
             * an app is started.
             */
            if (AppSettings == null) { AppSettings=new AppSettings();}
        }

        public AppSettings AppSettings { get; set; }
    }

    public class AppSettings
    {
        public bool DebugMode { get; set; } = false;
    }
}

कार्यान्वयन

var jsonObject = new AppConfigurationSettings();
WriteToJsonFile<AppConfigurationSettings>(file.FullName, jsonObject);

उत्पादन

{
  "AppSettings": {
    "DebugMode": false
  }
}

चूंकि हम सभी एक लाइनर से प्यार करते हैं

... यह न्यूटॉन्सॉफ्ट NuGet पैकेज पर निर्भर करता है, जो डिफ़ॉल्ट धारावाहिक से लोकप्रिय और बेहतर है।

Newtonsoft.Json.JsonConvert.SerializeObject(new {foo = "bar"})

प्रलेखन: जेएसओएन को क्रमबद्ध और deserializing







serialization