আমি কীভাবে সি # দিয়ে জেএসনকে পার্স করতে পারি?


455

আমার কাছে নিম্নলিখিত কোড রয়েছে:

var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);

ইনপুটটি responsecontentJSON, তবে এটি কোনও বস্তুর মধ্যে সঠিকভাবে পার্স করা হয়নি। আমি কীভাবে এটি সঠিকভাবে deserialize করা উচিত?


7
আরে আপনি যদি এই লিঙ্কটি চেষ্টা করতে পারেন techblog.procurios.nl/k/n618/news/view/14605/14863/...
Vamsi

34
আছে Jsonমধ্যে System.Web.Helpers, সেখানে JsonQueryStringConverterSystem.ServiceModel.Web, সেখানে JavascriptSerializerSystem.Web.Script.Serialization, DataContractJsonSerializerমধ্যে System.Runtime.Serialization.Json, নরক মাইক্রোসফট এমনকি তৃতীয় পক্ষের অন্তর্ভুক্ত করার সিদ্ধান্ত নিয়েছে Json.NETতার ASP.NET ওয়েব এপিআই হবে। আপনি যদি ভেবেছিলেন যে এটি যথেষ্ট নয়, এমএস নিয়ে আসছেন System.Jsonতবে বর্তমানে এটি ব্যবহারের পক্ষে অযোগ্য। মাইক্রোসফ্ট যাবার উপায় .... আমি সেরা সন্ধানকারী নেমস্পেসটি বেছে নিয়েছি।
নওফাল

4
@ ফুসি বাকিরা পৃথক সমাবেশে রয়েছেন। গুগল নেমস্পেস / ক্লাসের নাম, আপনি এমএসডিএন ডকুমেন্টেশনে সমাবেশটি পাবেন। শুধু যে সমাবেশে রেফারেন্স যুক্ত করুন।
নওফাল

1
শুধু সম্পূর্ণ করার জন্য, রয়েছে JsonValueWindows.Data.Jsonযা শুধুমাত্র উইন্ডোজ 8 এবং উপরে। আমি এটা পছন্দ করছি. এমএস একটি মিশনে রয়েছে :)
নওফাল

5
নিউটনসফ্টের তাদের সাইটে একটি তুলনা পৃষ্ঠা রয়েছে (এটি পক্ষপাতদুষ্ট তবে এখনও আকর্ষণীয় হতে পারে): newtonsoft.com/json/help/html/jsonnetvsdotnetserializers.htm । আমি বিশেষত অযৌক্তিক অভিধান সিরিয়ালকরণের সারিটি পছন্দ করেছি :)
ওহাদ স্নাইডার

উত্তর:


365

আমি ধরে নিচ্ছি আপনি Json.NET (নিউটোনসফট.জসন নিউগেট প্যাকেজ) ব্যবহার করছেন না । যদি এটি হয় তবে আপনার এটি করা উচিত।

এটিতে নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

  1. লিনকু থেকে জেএসন
  2. আপনার .NET অবজেক্টগুলিকে দ্রুত JSON এ রূপান্তর করার জন্য এবং আবার ফিরে আসার জন্য জসনসিরাইজার izer
  3. Json.NET allyচ্ছিকভাবে ডিবাগিং বা প্রদর্শনের জন্য ভাল ফর্ম্যাট, ইন্ডেন্টেড JSON উত্পাদন করতে পারে
  4. কোনও শ্রেণিকে কীভাবে সিরিয়ালাইজ করা হয় তা কাস্টমাইজ করার জন্য জাসনআইগনোর এবং জসনপ্রপারটির মতো বৈশিষ্ট্যগুলি একটি শ্রেণিতে যুক্ত করা যেতে পারে
  5. এক্সএমএল থেকে এবং জেএসএনকে রূপান্তর করার ক্ষমতা
  6. একাধিক প্ল্যাটফর্ম সমর্থন করে: নেট, সিলভারলাইট এবং কমপ্যাক্ট ফ্রেমওয়ার্ক

উদাহরণ থেকে কম। এই উদাহরণে, JsonConvertক্লাসটি কোনও বস্তুকে JSON এ এবং রূপান্তর করতে ব্যবহৃত হয়। এটি এই উদ্দেশ্যে দুটি স্থিতিশীল পদ্ধতি রয়েছে। তারা SerializeObject(Object obj)এবং DeserializeObject<T>(String 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);
//{
//  "Name": "Apple",
//  "Expiry": "2008-12-28T00:00:00",
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

18
আমি varযদি আমার উদ্দেশ্যটির সম্পূর্ণ কাঠামোটি জানি না, তবে আমি কি কোনও ধরণের ভেরিয়েবলকে ডিসেরায়ালাইজ করতে পারি ? বিশেষত, আমি র‌্যালি ব্যবহারকারী গল্পগুলি গ্রাস করছি এবং আমি সেগুলিকে অবজেক্টে রূপান্তর করতে চাই।
পেড্রো দুসো

16
@ ভেন্ডারওয়াইন জোনাথন - একটি আধুনিক ওয়েব ব্রাউজারে, JSON.parse (স্ট্রিং) এবং JSON.stringify (অবজেক্ট) উভয় হ্যান্ডেলগুলি আইএসও 8601 স্ট্রিং হিসাবে তারিখগুলি হ'ল এটি উপরের উত্তরে বর্ণিত ফর্ম্যাট। লোকেরা এটি অপ্রাসঙ্গিক সিদ্ধান্ত নেওয়ার আগে আপনি আপনার স্ট্যান্ডার্ডটি আপডেট করতে চাইতে পারেন। লোকেরা আপনার স্ট্যান্ডার্ডের চেয়ে তারিখগুলির অনেক বেশি প্রয়োজন।
পিটার জিতলেন

3
@PeterWone: না, JSON.parse('{"Expiry": "2008-12-28T00:00:00"}').Expiryফেরৎ স্ট্রিং "2008-12-28T00:00:00" , না একটি তারিখ। এটি একটি মাধ্যমে রূপান্তরিত হতে পারে , তবে তারিখগুলি সম্পর্কে কিছুই জানে না। আপনাকে একটি রিভিভারে যেতে হবে যা একটি প্যাটার্নের বিপরীতে প্রতিটি স্ট্রিংয়ের মান পরীক্ষা করে। Datenew Date(str)JSON.parse
টিজে ক্রাউডার

3
যেহেতু 3.703 সেকেন্ড 3s এবং 703ms এর সমান এবং বিভাজক একটি দশমিক বিন্দু আমি এটি আপনার কাছে রেখেছি যে এটি তিন দশমিক স্থানে সেকেন্ড।
পিটার জে

38
সবাই কেন প্রাসঙ্গিক সহ এই ধরনের সমস্যা আছে require, include, importবা usingতাদের উত্তরে বিবৃতি। এক লাইনে ব্যাথা লাগবে?
টোমা জ্যাটো - মনিকা

284

এখানে যেমন উত্তর দেওয়া হয়েছিল - সি # ডায়নামিক অবজেক্টে জেএসওনকে ডিজিজারাইজ করবেন?

এটি Json.NET ব্যবহার করে বেশ সহজ:

dynamic stuff = JsonConvert.DeserializeObject("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");

string name = stuff.Name;
string address = stuff.Address.City;

বা নিউটনসফট.জসন.লিনক ব্যবহার করে:

dynamic stuff = JObject.Parse("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");

string name = stuff.Name;
string address = stuff.Address.City;

13
@ ম্যাক্সহজস, আপনি ঠিক বলেছেন আমি কীভাবে JSON স্ট্রিংয়ের মানগুলি পার্স করতে পারি তা প্রদর্শনের জন্য আমি ইনলাইন "ম্যাজিক স্ট্রিংস" ব্যবহার করেছি। ডাবল উদ্ধৃতি দিয়ে পালানোর সাথে এটি জটিল দেখতে চায়নি। বাস্তব কোডে আমরা সাধারণত জেএসএন স্ট্রিংগুলি কোথাও ভেরিয়েবল হিসাবে পেয়েছি বা পরামিতি হিসাবে পাস করেছি।
দিমিত্রি পাভলভ

4
.NET 4 ব্যতীত আপনার 'ডায়নামিক' কীওয়ার্ড নেই। আপনি ঘোষণার জন্য এবং 'স্টাফ.নাম' এবং 'স্টাফ.এড্রেস.এড্রেস.সেসটি'র পরিবর্তে' ওয়ার স্টাফ 'ব্যবহার করতে পারেন আপনার যথাক্রমে' স্টাফ ["নাম"] "এবং 'স্টাফ [" ঠিকানা "] [" শহর "]' রয়েছে ।
ফিলিপ

1
@ ফিল এটি আপনাকে প্রকারের মান দেয় এবং আপনি একটিতে সূচি objectব্যবহার করতে পারবেন না object
অ্যালেক্স

138

তৃতীয় পক্ষের লাইব্রেরি ব্যবহার না করে এখানে কিছু বিকল্প রয়েছে :

// For that you will need to add reference to System.Runtime.Serialization
var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(@"{ ""Name"": ""Jon Smith"", ""Address"": { ""City"": ""New York"", ""State"": ""NY"" }, ""Age"": 42 }"), new System.Xml.XmlDictionaryReaderQuotas());

// For that you will need to add reference to System.Xml and System.Xml.Linq
var root = XElement.Load(jsonReader);
Console.WriteLine(root.XPathSelectElement("//Name").Value);
Console.WriteLine(root.XPathSelectElement("//Address/State").Value);

// For that you will need to add reference to System.Web.Helpers
dynamic json = System.Web.Helpers.Json.Decode(@"{ ""Name"": ""Jon Smith"", ""Address"": { ""City"": ""New York"", ""State"": ""NY"" }, ""Age"": 42 }");
Console.WriteLine(json.Name);
Console.WriteLine(json.Address.State);

System.Web.Helpers.Json সম্পর্কে আরও তথ্যের জন্য লিঙ্কটি দেখুন ।

আপডেট : আজকাল এটির সবচেয়ে সহজ উপায় Web.Helpersহ'ল নুগেট প্যাকেজটি ব্যবহার করা ।


আপনি যদি পূর্বের উইন্ডোজ সংস্করণগুলির বিষয়ে চিন্তা না করেন তবে আপনি Windows.Data.Jsonনেমস্পেসের ক্লাসগুলি ব্যবহার করতে পারেন :

// minimum supported version: Win 8
JsonObject root = Windows.Data.Json.JsonValue.Parse(jsonString).GetObject();
Console.WriteLine(root["Name"].GetString());
Console.WriteLine(root["Address"].GetObject()["State"].GetString());

আমি কেন আমার এএসপি.নেট ওয়েব সাইটে সিস্টেম.ওয়েব.হেল্পার্সকে দেখতে পাচ্ছি না (4.5)? এক্সলেমেন্ট, এক্সপ্যাথসিলিট এলিমেন্ট আমার ভিজ্যুয়াল স্টুডিওর জন্য পরিচিত নয়। কীভাবে এটি শিক্ষিত করবেন?
বুদা

ঠিক আছে, আপনাকে সংশ্লিষ্ট লাইব্রেরির জন্য রেফারেন্স যুক্ত করতে হবে (উপরের মন্তব্যে লেখা আছে), আরও তথ্যের জন্য এই নিবন্ধটি দেখুন। এছাড়াও, এই প্রশ্নটি আগ্রহী হতে পারে।
qqbenq

2
: আমি Web.Helpers পদ্ধতি একটি সমস্যাটি হল এই যে এই পোস্টে দ্বারা সমাধান করা হয়েছে মধ্যে এখানে কিন্তু দৌড়ে বর্ণনা ব্যবহৃত stackoverflow.com/questions/7066726/...
অ্যালেক্স

1
এটি সিস্টেম.রুনটাইম.সরিয়ালাইজেশন.জসন ব্যবহার করে নীচের নেমস্পেস ব্যবহার করে ডাব্লুপিএফ.বাইয়ের সাথে কাজ করছে; System.XML.XPath ব্যবহার করে; System.XML.Linq ব্যবহার করে;
শহীদ নিমেরুন্ডা


62

তাহলে .NET 4 আপনার কাছে উপলব্ধ, চেক আউট: http://visitmix.com/writings/the-rise-of-json (archive.org)

এই সাইট থেকে একটি স্নিপেট এখানে:

WebClient webClient = new WebClient();
dynamic result = JsonValue.Parse(webClient.DownloadString("https://api.foursquare.com/v2/users/self?oauth_token=XXXXXXX"));
Console.WriteLine(result.response.user.firstName);

এটি শেষ কনসোল.উরাইটলাইন বেশ মিষ্টি ...


দুঃখিত, প্রথমদিকে উত্তর দেওয়ার পর থেকে জিনিসগুলি পরিবর্তিত হয়েছে বলে মনে হচ্ছে। আমাকে চারপাশে একবার দেখতে হবে এবং কোন লাইব্রেরিটি সঠিক তা দেখতে হবে ...
এলোনইউ ওয়েবদেব

7
এই লাইব্রেরিটি সন্ধানের অপেক্ষায় রইলাম। সম্পাদনা: এটি কি এটি: ডায়নামিকসসন.কোডপ্লেক্স.কম ?
ব্যবহারকারী989056

1
আমি জানি না এখানে এলোনইউ ক্লাসটি কী বোঝায়, তবে উইন্ডোজ.ডাটা.জেসনে "জসনভ্যালু" রয়েছে (যা কেবল উইন্ডোজ ৮ এবং তারপরের জন্য - অদ্ভুত) এবং সিস্টেম.জসনে একই "জসনভ্যালু" যা এখনও পূর্বরূপে রয়েছে এবং Everশ্বর একাই জানেন যে এটি কখন প্রকাশিত হবে। এমএস যখন জসনের কথা আসে তখন আমাকে বিভ্রান্ত করে।
নওফাল

35

এটির আর একটি নেটিভ সমাধান, যার জন্য কোনও তৃতীয় পক্ষের লাইব্রেরি প্রয়োজন হয় না তবে System.Web.Exferences এর একটি রেফারেন্স জাভাস্ক্রিপ্টশিরাইজার। এটি কোনও নতুন নয়, তবে 3.5 এর পরে খুব অজানা বিল্ট-ইন বৈশিষ্ট্য।

using System.Web.Script.Serialization;

..

JavaScriptSerializer serializer = new JavaScriptSerializer();
objectString = serializer.Serialize(new MyObject());

এবং ফিরে

MyObject o = serializer.Deserialize<MyObject>(objectString)

2
এটি খুব সুন্দর, তবে এটির জন্য ওয়েব সংযোজনগুলির প্রয়োজন, সুতরাং দুর্ভাগ্যক্রমে এটি নেট নেট ক্লায়েন্ট প্রোফাইলে কাজ করে না, যা উইন্ডোজ এক্সপির জন্য সর্বশেষ। নেট সংস্করণ। .NET- র সম্পূর্ণ ইনস্টলেশন সম্ভব, তবে অনেক লোক কেবল ক্লায়েন্ট প্রোফাইলের সাথেই আটকে থাকেন। বিপরীতে, সিস্টেম.রুনটাইম.সরিয়ালাইজেশন.জসন.ডাটা কনট্রাক্ট জসনসিরাইজার এমনকি ক্লায়েন্ট প্রোফাইলে সমর্থিত।
আল কেপ

3
@ fr34kyn01535: উইন্ডোজ এক্সপি ডেস্কটপে দ্বিতীয় বৃহত্তম বাজারে রয়েছে। এটি প্রাসঙ্গিক।
ডনকিমেস্টার

যখন আমি জাভাস্ক্রিপ্টসিরাইজারটি আমার অবজেক্টটিকে ডিসিরিয়ালাইজ করার জন্য ব্যবহার করেছি তখন এটি কাজ করেছিল তবে এটি আমার তারিখটিকে ভুলভাবে ডিসস্রায়াল করেছে। এটি 4/19/2018 12:00 এএম হওয়া উচিত ছিল তবে 4/18/2018 08:00 অপরাহ্ণে ডিসিরিয়ালাইজ করা উচিত। নিউটনসফট.জসন.জসনকনভার্ট এটিকে প্রত্যাশার মতো ডিজিটালাইজড করেছিলেন।
ধনী

21

1
এটি নেট .৩.৫ সাথে সামঞ্জস্যপূর্ণ হিসাবে আরও ভাল
মাহমুদ ফয়েজ

এটি জাভাস্ক্রিপ্টসরিয়ালাইজারের থেকেও বেশ দ্রুতগতিতে
ডেভিড

16

সিস্টেম.জসন এখন কাজ করে ...

নুগেট ইনস্টল করুন https://www.nuget.org/packages/System.Json

PM> Install-Package System.Json -Version 4.5.0

নমুনা :

// PM>Install-Package System.Json -Version 4.5.0

using System;
using System.Json;

namespace NetCoreTestConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Note that JSON keys are case sensitive, a is not same as A.

            // JSON Sample
            string jsonString = "{\"a\": 1,\"b\": \"string value\",\"c\":[{\"Value\": 1}, {\"Value\": 2,\"SubObject\":[{\"SubValue\":3}]}]}";

            // You can use the following line in a beautifier/JSON formatted for better view
            // {"a": 1,"b": "string value","c":[{"Value": 1}, {"Value": 2,"SubObject":[{"SubValue":3}]}]}

            /* Formatted jsonString for viewing purposes:
            {
               "a":1,
               "b":"string value",
               "c":[
                  {
                     "Value":1
                  },
                  {
                     "Value":2,
                     "SubObject":[
                        {
                           "SubValue":3
                        }
                     ]
                  }
               ]
            }
            */

            // Verify your JSON if you get any errors here
            JsonValue json = JsonValue.Parse(jsonString);

            // int test
            if (json.ContainsKey("a"))
            {
                int a = json["a"]; // type already set to int
                Console.WriteLine("json[\"a\"]" + " = " + a);
            }

            // string test
            if (json.ContainsKey("b"))
            {
                string b = json["b"];  // type already set to string
                Console.WriteLine("json[\"b\"]" + " = " + b);
            }

            // object array test
            if (json.ContainsKey("c") && json["c"].JsonType == JsonType.Array)
            {
                // foreach loop test
                foreach (JsonValue j in json["c"])
                {
                    Console.WriteLine("j[\"Value\"]" + " = " + j["Value"].ToString());
                }

                // multi level key test
                Console.WriteLine("json[\"c\"][0][\"Value\"]" + " = " + json["c"][0]["Value"].ToString());
                Console.WriteLine("json[\"c\"][0][\"Value\"]" + " = " + json["c"][1]["Value"].ToString());
                Console.WriteLine("json[\"c\"][1][\"SubObject\"][0][\"SubValue\"]" + " = " + json["c"][1]["SubObject"][0]["SubValue"].ToString());
            }

            Console.WriteLine();
            Console.Write("Press any key to exit.");
            Console.ReadKey();
        }
    }
}

1
আধুনিক সিস্টেমটি কীভাবে সঠিকভাবে ব্যবহার করতে হয় তার একটি উদাহরণ সন্ধান করার চেষ্টা করছি। জসন.এনইটি / নিউটসোনফট.জসন / "নিউটসন.জসন" এবং সিস্টেম.জসনের পুরনো পুনরাবৃত্তির পরে অবহেলিত হওয়ার পরে জসন আমাকে এখানে এনেছে। এই জন্য আপনাকে ধন্যবাদ.
monkey0506

1
এটি আমাকে বিশাল উপায়ে সহায়তা করেছিল। আপনাকে অনেক ধন্যবাদ.
এমএকে

10

আপনার জসনের উপর ভিত্তি করে একটি বর্গ তৈরি করতে এই সরঞ্জামটি ব্যবহার করুন:

http://json2csharp.com/

এবং তারপরে ক্লাসটি ব্যবহার করে আপনার জসনকে deserialize করুন। উদাহরণ:

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}


string json = @"{
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";

Account account = JsonConvert.DeserializeObject<Account>(json);

Console.WriteLine(account.Email);
// james@example.com

তথ্যসূত্র: https://forums.asp.net/t/1992996.aspx?Nested+Json+ ডিজাইরিয়ালাইজেশন ++++++++++++++ অবজেক্ট https://www.newtonsoft.com/json/help /html/DeserializeObject.htm


9

নিম্নলিখিত কোড ব্যবহার করে দেখুন:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL");
JArray array = new JArray();
using (var twitpicResponse = (HttpWebResponse)request.GetResponse())
using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
{
    JavaScriptSerializer js = new JavaScriptSerializer();
    var objText = reader.ReadToEnd();

    JObject joResponse = JObject.Parse(objText);
    JObject result = (JObject)joResponse["result"];
    array = (JArray)result["Detail"];
    string statu = array[0]["dlrStat"].ToString();
}

ধন্যবাদ, আমি ["ফলাফল" + পরিবর্তনশীল] অংশটি চেয়েছিলাম কারণ আমি এখানে ব্যবহার করতে ভেরিয়েবলগুলি ব্যবহার করতে চেয়েছিলাম যা আপনি সহজেই JSON.NET এর সাথে করতে পারবেন না।
পিএইচপিগুরু

এই লাইনটি কি কিছু করছে ... জাভাস্ক্রিপ্টসিরাইজার জেএস = নতুন জাভাস্ক্রিপ্টসিরাইজার (); আগাম ধন্যবাদ.
ক্রিস ক্যাটিগনি

9

System.Text.Json

। নেট কোর 3.0 System.Text.Jsonবিল্ট-ইন এর সাথে আসে যার অর্থ আপনি কোনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহার না করেই জেএসএনকে ডিসরিয়ালাইজ / সিরিয়ালাইজ করতে পারবেন ।

আপনার শ্রেণি সিরিজায়িত করতে (এস) JSON স্ট্রিংয়ে:

var json = JsonSerializer.Serialize(order);

দৃS়ভাবে টাইপ করা শ্রেণিতে JSON কে deserialize করতে:

var order = JsonSerializer.Deserialize<Order>(json);

সুতরাং আপনার যদি নীচের মতো ক্লাস থাকে:

public class Order
{
    public int Id { get; set; }
    public string OrderNumber { get; set; }
    public decimal Balance { get; set; }
    public DateTime Opened { get; set; }
}

var json = JsonSerializer.Serialize(order);
// creates JSON ==>
{
    "id": 123456,
    "orderNumber": "ABC-123-456",
    "balance": 9876.54,
    "opened": "2019-10-21T23:47:16.85",
};

var order = JsonSerializer.Deserialize<Order>(json);
// ==> creates the above class

একটি বিষয় লক্ষণীয় হ'ল আপনার নিজের কোড ব্যবহার করার সময় JSON বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে পরিচালনা System.Text.Json করে না (তবে এটি এমভিসি / ওয়েবএপিআই অনুরোধগুলি এবং মডেল বাইন্ডার ব্যবহার করার সময় করে)।camelCase

এটি সমাধান করার জন্য আপনাকে JsonSerializerOptionsপ্যারামিটার হিসাবে পাস করতে হবে ।

JsonSerializerOptions options = new JsonSerializerOptions
{        
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,  // set camelCase       
    WriteIndented = true                                // write pretty json
};

// pass options to serializer
var json = JsonSerializer.Serialize(order, options);
// pass options to deserializer
var order = JsonSerializer.Deserialize<Order>(json, options);

সিস্টেম.টেক্সট.জসন। নেট ফ্রেমওয়ার্ক এবং একটি নেট-প্যাকেজ সিস্টেম হিসাবে নেট নেট স্ট্যান্ডার্ডের জন্যও উপলব্ধ System


1
আপনার ক্লাস না থাকলে কী হবে? আপনি যদি কেবল অস্পষ্টভাবে জানতে পারেন যে জেসন ডেটা কী ধারণ করবে? বা কীগুলি কি আদৌ বিদ্যমান?
চেরোনা

@Cherona ব্যবহার JsonDocument.Parse
হালদো

5

এমএসডিএন সাইট থেকে নিম্নলিখিতগুলির জন্য আমার মনে করা উচিত যে আপনি যা অনুসন্ধান করছেন তার জন্য কিছু দেশীয় কার্যকারিতা সরবরাহ করতে সহায়তা করুন। দয়া করে নোট করুন এটি উইন্ডোজ ৮ এর জন্য নির্দিষ্ট করা আছে সাইট থেকে এমন একটি উদাহরণ নীচে তালিকাভুক্ত করা হয়েছে।

JsonValue jsonValue = JsonValue.Parse("{\"Width\": 800, \"Height\": 600, \"Title\": \"View from 15th Floor\", \"IDs\": [116, 943, 234, 38793]}");
double width = jsonValue.GetObject().GetNamedNumber("Width");
double height = jsonValue.GetObject().GetNamedNumber("Height");
string title = jsonValue.GetObject().GetNamedString("Title");
JsonArray ids = jsonValue.GetObject().GetNamedArray("IDs");

এটি উইন্ডোজ.ডাটা.জেএসএন নেমস্পেস ব্যবহার করে ।


6
দুর্দান্ত, তবে "ন্যূনতম সমর্থিত ক্লায়েন্ট: উইন্ডোজ 8"
ওয়াটব্লিউবারিফ

আমি মনে করি এটি আর সমর্থিত নয় এবং এখন সেখানে নিউটসনফট জসন ডেল আইকোল্ডেন্ট উইন্ডোজ.ডাটা.জেসন খুঁজে
পেয়েছে

3
@ ভার্তোসো, যেমন ওয়াটবাইবারিফ উল্লেখ করেছেন যে এটি আসলে নতুন নয়, তবে মাইক্রোসফ্টের ন্যূনতম সমর্থন , কেবল উইন্ডোজ ৮
টার্গেটফগ্র্যাভিটি

3

আপনি নিম্নলিখিত extentions ব্যবহার করতে পারেন

public static class JsonExtensions
{
    public static T ToObject<T>(this string jsonText)
    {
        return JsonConvert.DeserializeObject<T>(jsonText);
    }

    public static string ToJson<T>(this T obj)
    {
        return JsonConvert.SerializeObject(obj);
    } 
}

0

আমার মনে হয় আমি যে সেরা উত্তরটি দেখেছি তা @ এমডি_সায়ম_আহমেড।

আপনার প্রশ্নটি "আমি কীভাবে সি # দিয়ে জসনকে পার্স করতে পারি", তবে মনে হচ্ছে আপনি জসনকে ডিকোড করতে চাইছেন। আপনি যদি এটি ডিকোড করতে চান তবে আহমেদের উত্তর ভাল।

আপনি যদি এএসপি.নেট ওয়েব এপিতে এটি সম্পাদন করার চেষ্টা করছেন তবে সবচেয়ে সহজ উপায় হ'ল একটি ডেটা ট্রান্সফার অবজেক্ট তৈরি করা যা আপনার যে ডেটা নিয়োগ করতে চান তা ধারণ করে:

public class MyDto{
    public string Name{get; set;}
    public string Value{get; set;}
}

আপনি কেবল আপনার অনুরোধে অ্যাপ্লিকেশন / জেসন শিরোনাম যুক্ত করেছেন (যদি আপনি ফিডলার ব্যবহার করেন, উদাহরণস্বরূপ)। এরপরে আপনি এএসপি.নেট ওয়েব এপিআইতে এটি ব্যবহার করবেন:

//controller method -- assuming you want to post and return data
public MyDto Post([FromBody] MyDto myDto){
   MyDto someDto = myDto;
   /*ASP.NET automatically converts the data for you into this object 
    if you post a json object as follows:
{
    "Name": "SomeName",
      "Value": "SomeValue"
}
*/
   //do some stuff
}

আমি যখন আমার ওয়েব এপিতে কাজ করছিলাম এবং আমার জীবনকে অতি সহজ করে তুলেছিলাম তখন এটি আমাকে অনেক সহায়তা করেছিল।



-1
var result = controller.ActioName(objParams);
IDictionary<string, object> data = (IDictionary<string, object>)new System.Web.Routing.RouteValueDictionary(result.Data);
Assert.AreEqual("Table already exists.", data["Message"]);

2
কোডের কয়েকটি সারি পোস্ট করার পরিবর্তে আপনি নিজের সমাধানটি আরও ভালভাবে ব্যাখ্যা করুন। আপনি পড়তে পারেন আমি কীভাবে একটি ভাল উত্তর লিখি
ম্যাসিমিলিয়ানো ক্রাউস

System.Webআপনার প্রকল্পের রেফারেন্সগুলিতে অন্তর্ভুক্ত করতে ভুলবেন না ।
ওহাদ কোহেন

-3
 using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(user)))
 {
    // Deserialization from JSON  
    DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(UserListing))
    DataContractJsonSerializer(typeof(UserListing));
    UserListing response = (UserListing)deserializer.ReadObject(ms);

 }

 public class UserListing
 {
    public List<UserList> users { get; set; }      
 }

 public class UserList
 {
    public string FirstName { get; set; }       
    public string LastName { get; set; } 
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.