সি # তে কীভাবে জেএসএন স্ট্রিং তৈরি করবেন


238

আমি এইচটিটিপি প্রতিক্রিয়াতে ফিরে পাঠানোর জন্য কিছু এক্সএমএল তৈরি করতে এক্সএমএল রাইটারটি ব্যবহার করেছি। আপনি কীভাবে একটি JSON স্ট্রিং তৈরি করবেন। আমি ধরে নিলাম আপনি JSON স্ট্রিং তৈরি করতে কেবল স্ট্রিংবিল্ডার ব্যবহার করবেন এবং সেগুলি আপনার প্রতিক্রিয়াটিকে JSON হিসাবে ফর্ম্যাট করবে?


উত্তর:


249

আপনি জাভাস্ক্রিপ্টসিরাইজার ক্লাস ব্যবহার করতে পারেন , একটি কার্যকর এক্সটেনশন পদ্ধতি তৈরি করতে এই নিবন্ধটি দেখুন check

নিবন্ধ থেকে কোড:

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 পাঠ্য গঠন করবেন তা ঠিক করার চেষ্টা করছেন। ধন্যবাদ
PositiveGuy

আপনি যদি নেট। 3.5 ব্যবহার না করেন! দা ** এটা
PositiveGuy

2
আপনি যদি নেট .০.০ থেকে এটি ব্যবহার করতে চান তবে জাভাস্ক্রিপ্টসিরাইজার এএসপি.এনইটি অ্যাজাক্স 1.0 এর অংশ।
জো চুং

2
আপনি এখনও এটি ব্যবহার করতে পারেন। এটিএসপি
নেরেন

আমাদের প্রকল্পটি ভিএস ২০০৮ এ খুলতে পারে ... তাই এটি কোনও সময়ে রূপান্তরিত হয়েছিল। তার মানে কি এখন আমরা আমাদের বিদ্যমান কোডবেসের মধ্যে .NET 3.5 ব্যবহার করতে পারি?
PositiveGuy

366

নিউটনসফট.জসন ব্যবহার করা এটি সত্যই সহজ করে তুলেছে :

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);

ডকুমেন্টেশন: জেএসএনকে সিরিয়ালাইজিং এবং ডিজিজারাইজ করছে


8
এমএস এখন নিউটনসফটকে ভিএস এমভিসি 4 প্রকল্পের টেমপ্লেটে স্ট্যান্ডার্ড হিসাবে জাহাজে পাঠিয়েছে
ক্রিস এফ ক্যারল

45
প্রয়োজন হলে আপনি বেনামী বস্তু ধারাবাহিকভাবে করতে পারেন: string json = JsonConvert.SerializeObject(new { "PropertyA" = obj.PropertyA });
ম্যাট বেকম্যান 22 '

9
। @MattBeckman আমি "পেতে অবৈধ বেনামী টাইপ সদস্য declarator বেনামী টাইপ সদস্যদের সদস্য নিয়োগ, সহজ নাম অথবা সদস্য অ্যাক্সেস সহ ঘোষিত করা আবশ্যক করা উচিত নয়। "PropertyA"হতে PropertyA?
ইউনুস

সুতরাং আমাদের একটি সাধারণ জেসন নির্মাণের জন্য একটি শ্রেণি এবং অবজেক্টগুলি বাস্তবায়ন করতে হবে! নেস্টেড - নির্ধারিত অ্যারে - উপাদানগুলি কল্পনা করুন। বাতাসে এত উত্সাহ কেন দেখছি না!
ভাসিলিস

6
@ ম্যাটবেকম্যান @ জোনা string json = JsonConvert.SerializeObject(new { PropertyA = obj.PropertyA });ডাবল উদ্ধৃতিবিহীনPropertyA.
জোসে

18

এই লাইব্রেরিটি সি # থেকে জেএসএনের পক্ষে খুব ভাল

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


1
আমাকে জিজ্ঞাসা করা যাক, এই কাঠামোটি বনাম ব্যবহারের কী কী সুবিধা রয়েছে যা কেবলমাত্র সিএমএসের উপরে উল্লিখিত কেবলমাত্র সেই সহায়ক পদ্ধতি?
PositiveGuy

1
আপনাকে
জাসনের

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"]);

সহজ এবং সহজ। ধন্যবাদ।
কিউমাস্টার

13

এই কোড স্নিপেট .NET 3.5 তে সিস্টেম.রুনটাইম.সরিয়ালাইজেশন.জসন থেকে ডেটা কনট্রাক্ট জসনসিরাইজার ব্যবহার করে।

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

জেসন-নেট.এএসপিএক্স প্রকল্পের জন্য http://www.codeplex.com/json/ এ একবার দেখুন । চাকাটি পুনরায় উদ্ভাবন কেন?


3
নির্ভর করে, আমি কেবল জেএসএন তৈরি করতে তৃতীয় পক্ষের ওপেন সোর্স প্লাগইনের উপর নির্ভর করতে চাই না। বরং নিজেই স্ট্রিং / সহায়ক পদ্ধতি তৈরি করতে চাই।
PositiveGuy

7

আপনি আমার সার্ভিসস্ট্যাক জসনসিরাইজারও চেষ্টা করতে পারেন এটি এই মুহুর্তে নেট। নেট জেএসএন সিরিয়ালাইজার । এটি ডেটা চুক্তিগুলি ক্রমিকায়িতকরণ, যে কোনও POCO প্রকার, ইন্টারফেস, অজানা প্রকারগুলি সহ দেরী-আবদ্ধ বিষয়গুলি সমর্থন করে supports

বেসিক উদাহরণ

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

দ্রষ্টব্য: কেবলমাত্র মাইক্রোসফ্টস জাভাস্ক্রিপ্টসিরাইজার ব্যবহার করুন যদি পারফরম্যান্স আপনার পক্ষে গুরুত্বপূর্ণ না হয় কারণ আমার জেএসওএন সিরিয়ালাইজারের চেয়ে 40x-100x অবধি ধীরে ধীরে ধীরে ধীরে এটি আমার মানদণ্ডের বাইরে রেখে যেতে হয়েছিল ।


আমি জসনসরিয়ালেসকে চেষ্টা করেছি। সিরিয়ালের টুস্ট্রিংকে অবজেক্টের একটি তালিকা দিয়েছিলাম এবং এটি খালি জেসসনটি ফিরে পেয়েছে: "[{}, {}]" পেস্টবিন. com/yইউ57 এল 3 টি সিরিয়ালাইজটোস্ট্রিং i.imgur.com/dYIE7J1.png কল করার আগে আমার অবজেক্টটি কেমন দেখাচ্ছে তা এখানে' s এখানে শীর্ষে ভোট দেওয়া উত্তরগুলি কাজ করেছিল, আমি যা প্রত্যাশা করছিলাম তা ফেরত: পেস্টবিন.com
ম্যাথু লক

দ্রুততম। নেট জেএসওএন সিরিয়ালাইজার লিঙ্কটি মারা গেছে।

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;
        }                
    };
}

এবং তারপরে আপনি কলিংয়ের সাথে জেএসএন স্ট্রিংটি পেতে পারেন

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

আপনি যদি দুটি বিল্ট-ইন জেএসএন সিরিয়ালাইজার ( জাভাস্ক্রিপ্টশিরাইজার এবং ডেটা কন্ট্র্যাক্ট জসনসিরাইজার ) ব্যবহার করতে না চান বা না করতে পারেন তবে আপনি জসনএক্সসারিয়ালাইজার লাইব্রেরিটি চেষ্টা করতে পারেন - আমি এটি বেশ কয়েকটি প্রকল্পে ব্যবহার করি এবং বেশ ভাল কাজ করে।


1
আমি জাভাস্ক্রিপ্টসরিয়ালাইজার চেষ্টা করেছি এবং এটি নাল বস্তুর সাথে ভাল কাজ করে না।
লুক 101

1
@ লুক 101: ঠিক কীভাবে? মানে আমি এটি প্রতিদিন ব্যবহার করি এবং কখনও সমস্যায় পড়েনি, তাই আমি সত্যই কৌতুহলী! (কোনও বিড়ম্বনা নেই, আমি সত্যিই কৌতূহল কারণ আমি কখনই সমস্যার মুখোমুখি হইনি)
তামাস সিজনে

2

আপনি যদি কোনও ওয়েব পৃষ্ঠায় JSON এর মাধ্যমে ডেটা পরিবেশন করার জন্য একটি ওয়েব পরিষেবা তৈরি করার চেষ্টা করছেন, তবে এএসপি.নেট অ্যাজাক্স টুলকিটটি বিবেচনা করুন:

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

এটি ওয়েব সার্ভিসের মাধ্যমে পরিবেশন করা আপনার অবজেক্টগুলিকে স্বয়ংক্রিয়ভাবে জসন-এ রূপান্তর করবে এবং এর সাথে সংযোগ স্থাপনের জন্য আপনি যে প্রক্সি ক্লাস ব্যবহার করতে পারেন তা তৈরি করবে।


এটি কেবলমাত্র একটি .ashx এ কল হবে যা JSON এর একটি স্ট্রিং ফিরিয়ে দেবে। প্রথমে, আমি কীভাবে স্ট্রিংটি তৈরি করতে পারি তা বোঝার চেষ্টা করছি..এক স্ট্রিংবিল্ডার ব্যবহার করুন? দ্বিতীয়ত হ্যাঁ, কীভাবে সিরিয়ালাইজ করা যায়। যখন এক্সএমএল ফিরে আপনি শুধু সেট চাই প্রতিক্রিয়া এর conten টি টাইপ আমি মনে করি: context.Response.ContentType = "টেক্সট / XML"
PositiveGuy

1

DataContractJSONSerializer XMLSerializer হিসাবে একই সহজ আপনার জন্য সবকিছু করতে হবে। এটি কোনও ওয়েব অ্যাপ্লিকেশনে ব্যবহার করা তুচ্ছ। আপনি যদি ডাব্লুসিএফ ব্যবহার করে থাকেন তবে আপনি একটি বৈশিষ্ট্যের সাথে এর ব্যবহার নির্দিষ্ট করতে পারেন। ডেটা কন্ট্রাক্টসরিয়ালাইজার পরিবারটিও খুব দ্রুত।


1

আমি খুঁজে পেয়েছি যে আপনার সিরিয়ালাইজারের মোটেই দরকার নেই। আপনি যদি তালিকা হিসাবে বস্তুটি ফেরত দেন। আমাকে একটি উদাহরণ ব্যবহার করুন।

আমাদের এসএমএক্সে আমরা ভেরিয়েবলটি ব্যবহার করে আমরা পাশ করে দিয়েছি

// 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 অ্যারে এনকোডজেসসঅবজেক্টআররে সহজ সরল অবজেক্ট ()

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);

ফলাফল: [[29, "মাইক"], [5, "ডামি"]]

সুন্দর ব্যবহার

সুন্দর মুদ্রণ জেএসওন অ্যারে প্রিটিপ্রিন্টজেসন () স্ট্রিং এক্সটেনশন পদ্ধতি

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"
      ]
   ]
]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.