JObject দিয়ে ফ্লাইতে JSON তৈরি করা হচ্ছে


96

আমার কিছু ইউনিট পরীক্ষার জন্য আমি নির্দিষ্ট জেএসওএন মানগুলি তৈরি করার ক্ষমতা (এই ক্ষেত্রে রেকর্ড অ্যালবামগুলি) চাই যা পরীক্ষার অধীনে সিস্টেমের জন্য ইনপুট হিসাবে ব্যবহার করা যেতে পারে।

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

var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");

এটি সূক্ষ্মভাবে কাজ করে, তবে আমি কখনই "ম্যাজিক স্ট্রিং" সিনট্যাক্স পছন্দ করি না এবং জাভাস্ক্রিপ্টে প্রসারিত-সম্পত্তি সিনট্যাক্সের কাছাকাছি কিছু পছন্দ করব:

jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";

4
শিল্পী / অ্যালবাম নির্বাচনের জন্য আপনার ডাবল পয়েন্ট পাওয়া উচিত!
স্পটেডমাহ্ন

উত্তর:


143

ভাল, কিভাবে সম্পর্কে:

dynamic jsonObject = new JObject();
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against the world";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";

4
পারফেক্ট! ঠিক আমি যা খুঁজছিলাম, সম্পূর্ণরূপে ভুলে গিয়েছিলাম dynamic
কার্ল অ্যান্ডারসন

আমি যখন আপনার কোডটি চালানোর চেষ্টা করি তখন আমি 'Newtonsoft.Json.Linq.JObject' তে 'তারিখ' ত্রুটির সংজ্ঞা রাখি না। আমি যেভাবে এটি কাজ করতে পারি তা হ'ল প্রথম লাইনটি এতে পরিবর্তন করুন: dynamic jsonExpando = new ExpandoObject();এবং আপনার কোডের পরে একটি লাইন যুক্ত করুন:JObject jsonObject = JObject.FromObject(jsonExpando);
BornToCode

4
আপনি যদি আপনার জসন অবজেক্টে একটি তালিকা <> যোগ করতে চান তবে আপনার মতো কিছু করা দরকার jsonObject.list = JToken.FromObject(mylist);
স্টিভ স্মিথ

আপনি যদি ক্ষেত্রের নামটি বিশেষ চরিত্রের উদাহরণ হিসাবে তৈরি করে থাকেন তবে আপনি সূচক এবং সম্পত্তি চিহ্নিতকরণের সংমিশ্রণটি ব্যবহার করতে পারেন j আপনি jsonObject.Create-Year = 1995 লিখতে পারবেন না, তবে নিম্নলিখিতটি ব্যবহার করতে পারবেন j "] = 1995; jsonObject.Artist =" 2Pac ";
PAS

71

আপনি JObject.Parseঅপারেশনটি ব্যবহার করতে পারেন এবং কেবলমাত্র একক উদ্ধৃতি সীমাবদ্ধ জেএসওএন পাঠ্য সরবরাহ করতে পারেন ।

JObject  o = JObject.Parse(@"{
  'CPU': 'Intel',
  'Drives': [
    'DVD read/writer',
    '500 gigabyte hard drive'
  ]
}");

এটিতে আসলে JSON হওয়ার দুর্দান্ত সুবিধা রয়েছে এবং তাই এটি JSON হিসাবে পড়ে।

অথবা আপনার কাছে পরীক্ষার ডেটা রয়েছে যা গতিশীল আপনি JObject.FromObjectঅপারেশন ব্যবহার করতে পারেন এবং একটি ইনলাইন অবজেক্ট সরবরাহ করতে পারেন ।

JObject o = JObject.FromObject(new
{
    channel = new
    {
        title = "James Newton-King",
        link = "http://james.newtonking.com",
        description = "James Newton-King's blog.",
        item =
            from p in posts
            orderby p.Title
            select new
            {
                title = p.Title,
                description = p.Description,
                link = p.Link,
                category = p.Categories
            }
    }
});

সিরিয়ালাইজেশন জন্য Json.net ডকুমেন্টেশন


10
JObject.FromObject সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত। ধন্যবাদ
টমাস

4
আমি মনে করি JObject.FromObjectবিশেষ চরিত্রের মতো বৈশিষ্ট্য থাকলে সেখানে কাজ করবে না -
যতীন সংঘভি

39

যখন আপনার কাছে JSON বৈশিষ্ট্যগুলি বৈধ সি # ভেরিয়েবলের নাম নয় উদাহরণস্বরূপ dynamic, না কোনও JObject.FromObjectসমাধান কার্যকর হয় না "@odata.etag"। আমি আমার পরীক্ষার ক্ষেত্রে সূচক প্রারম্ভিক বাক্য গঠন পছন্দ করি:

JObject jsonObject = new JObject
{
    ["Date"] = DateTime.Now,
    ["Album"] = "Me Against The World",
    ["Year"] = 1995,
    ["Artist"] = "2Pac"
};

আরম্ভের জন্য JObjectএবং এতে বৈশিষ্ট্য যুক্ত করার জন্য পৃথক পৃথক সংলগ্ন সংকেত থাকা সূচক ইনিশিয়ালাইজারগুলি ক্লাসিক অবজেক্ট ইনিশিয়ালাইজারের তুলনায় আরও বেশি পঠনযোগ্য করে তোলে, বিশেষত যৌগিক জেএসএন বস্তুর ক্ষেত্রে নীচের মত:

JObject jsonObject = new JObject
{
    ["Date"] = DateTime.Now,
    ["Album"] = "Me Against The World",
    ["Year"] = 1995,
    ["Artist"] = new JObject
    {
        ["Name"] = "2Pac",
        ["Age"] = 28
    }
};

অবজেক্ট ইনিশিয়ালাইজার সিনট্যাক্সের সাথে উপরের আরম্ভটি হবে:

JObject jsonObject = new JObject
{
    { "Date", DateTime.Now },
    { "Album", "Me Against The World" },
    { "Year", 1995 }, 
    { "Artist", new JObject
        {
            { "Name", "2Pac" },
            { "Age", 28 }
        }
    }
};

4
শেষটি নিশ্চিতভাবেই সি # তে জসন লেখার জন্য সেরা সিনট্যাক্স।
অ্যান্টনি ব্রেনেলিয়ার

দেখতে stackoverflow.com/questions/51015036/... পাশাপাশি কিভাবে সংগ্রহগুলি সঙ্গে এই কাজ করার জন্য
kofifus

30

কিছু পরিবেশ রয়েছে যেখানে আপনি গতিশীল ব্যবহার করতে পারবেন না (যেমন Xamarin.iOS) বা এমন ক্ষেত্রে যেখানে আপনি কেবল পূর্ববর্তী বৈধ উত্তরের বিকল্প সন্ধান করেন।

এই ক্ষেত্রে আপনি করতে পারেন:

using Newtonsoft.Json.Linq;

JObject jsonObject =
     new JObject(
             new JProperty("Date", DateTime.Now),
             new JProperty("Album", "Me Against The World"),
             new JProperty("Year", "James 2Pac-King's blog."),
             new JProperty("Artist", "2Pac")
         )

আরও ডকুমেন্টেশন এখানে: http://www.newtonsoft.com/json/help/html/CryingLINQtoJSON.htm


2

বৈশিষ্ট্যগুলি থেকে নিউটসনফট জবজেক্ট তৈরির সহজ উপায়।

এটি একটি নমুনা ব্যবহারকারী বৈশিষ্ট্য

public class User
{
    public string Name;
    public string MobileNo;
    public string Address;
}

এবং আমি এই সম্পত্তিটি নিউটোনসফট জবজেটে চাই:

JObject obj = JObject.FromObject(new User()
{
    Name = "Manjunath",
    MobileNo = "9876543210",
    Address = "Mumbai, Maharashtra, India",
});

আউটপুট এর মত হবে:

{"Name":"Manjunath","MobileNo":"9876543210","Address":"Mumbai, Maharashtra, India"}

2

শীঘ্রই বা পরে আপনার বিশেষ চরিত্রের সম্পত্তি থাকবে। আপনি হয় সূচী বা সূচক এবং বৈশিষ্ট্যের সংমিশ্রণ ব্যবহার করতে পারেন।

dynamic jsonObject = new JObject();
jsonObject["Create-Date"] = DateTime.Now; //<-Index use
jsonObject.Album = "Me Against the world"; //<- Property use
jsonObject["Create-Year"] = 1995; //<-Index use
jsonObject.Artist = "2Pac"; //<-Property use

কিভাবে এই প্রশ্নের উত্তর দেয়?
Enigmativity

@ দক্ষতা, আমি যে বিষয়টি তৈরি করছি তা হ'ল আপনি সূচক স্বরলিপি এবং সম্পত্তি চিহ্নিতকরণ একসাথে ব্যবহার করতে পারেন। অর্থাৎ আপত্তি [x] = x1; obj.y = y1 একই কোডে ব্যবহার করা যেতে পারে। গতিশীল কীওয়ার্ড এবং সূচী সূচকের সংমিশ্রণটি প্রশ্নের উত্তর দেয়। অন্য কোনও উত্তরে এর উল্লেখ নেই। সম্ভবত, এটি একটি উত্তর চেয়ে মন্তব্য করা উচিত।
PAS

আমি কেবল মনে করি যে প্রশ্নটি ম্যাজিক স্ট্রিং ব্যবহার না করার বিষয়ে, তবে এই উত্তরটি তাকে তা দিচ্ছে।
Enigmativity

@ দক্ষতা, গতিশীল কীওয়ার্ড কেবল সংকলককে বোকা বানাবে। সুতরাং এটি স্বেচ্ছাচারী স্ট্রিং থেকে আলাদা নয়। গতিশীল টাইপের অবজেক্ট দৃ strongly়ভাবে টাইপ করা হয় না। এটি কেবল একটি সিনট্যাকটিক চিনি। অন্তর্নিহিত বস্তুর সম্পত্তি না থাকলে এটি রানটাইম ব্যর্থ হবে। তবে আপনি কেবল বৈশিষ্ট্যগুলি ব্যবহার করতে পারবেন না যদি সম্পত্তির নামটিতে বিশেষ অক্ষর থাকে যেমন 99 বোতলস অফফিয়ার, নেমস্পেস, এটি সমস্ত-ওভার। সুতরাং এই ক্ষেত্রে, আমরা সূচকযুক্ত বৈশিষ্ট্যগুলি ব্যবহার করতে পারি। অন্যান্য উত্তরগুলি আপনাকে মনে করে যে এটি এক বা অন্য, তবে আপনি সম্পত্তি এবং সূচকটি মিশ্রিত করতে পারেন match
PAS

-3

আপনি নিউটনসফট লাইব্রেরিটি ব্যবহার করতে পারেন এবং নীচে এটি ব্যবহার করতে পারেন

using Newtonsoft.Json;



public class jb
{
     public DateTime Date { set; get; }
     public string Artist { set; get; }
     public int Year { set; get; }
     public string album { set; get; }

}
var jsonObject = new jb();

jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";


System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
         new System.Web.Script.Serialization.JavaScriptSerializer();

string sJSON = oSerializer.Serialize(jsonObject );

4
আপনি এখানে লাইব্রেরি নিউটসনফটটি ব্যবহার করছেন না
মিকি পার্লস্টাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.