উত্তর:
কেবলমাত্র সংখ্যাসূচক বা বুলিয়ান মানগুলি সহ ডেটা স্ট্রাকচার ক্রিয়াকলাপ করা মোটামুটি সোজা। আপনার যদি সিরিয়ালাইজ করার মতো বেশি কিছু না থাকে তবে আপনি আপনার নির্দিষ্ট ধরণের জন্য একটি পদ্ধতি লিখতে পারেন।
একটি জন্য Dictionary<int, List<int>>
যেমন আপনার নির্দিষ্ট করা হয়েছে, আপনি Linq ব্যবহার করতে পারেন:
string MyDictionaryToJson(Dictionary<int, List<int>> dict)
{
var entries = dict.Select(d =>
string.Format("\"{0}\": [{1}]", d.Key, string.Join(",", d.Value)));
return "{" + string.Join(",", entries) + "}";
}
তবে, যদি আপনি বেশ কয়েকটি বিভিন্ন ক্লাস, বা আরও জটিল ডেটা স্ট্রাকচারকে সিরিয়ালাইজ করছেন, বা বিশেষত যদি আপনার ডেটাতে স্ট্রিংয়ের মান রয়েছে তবে আপনি ইতিমধ্যে জেএসএন লাইব্রেরি ব্যবহার করে ভাল হবেন যে ইতিমধ্যে পলায়ন চরিত্র এবং লাইন ব্রেকগুলির মতো জিনিসগুলি কীভাবে পরিচালনা করতে হবে তা জানেন। জসন.এনইটি একটি জনপ্রিয় বিকল্প।
এই উত্তরে জসন.এনইটি উল্লেখ করা হয়েছে তবে আপনি কীভাবে কোনও অভিধান ক্রমিকায়িত করতে Json.NET ব্যবহার করতে পারেন তা বলার অপেক্ষা রাখে না:
return JsonConvert.SerializeObject( myDictionary );
জাভাস্ক্রিপ্টশিরাইজারের বিপরীতে, কাজ করার জন্য জসনকনভার্টের জন্য অভিধানের কোনও myDictionary
ধরণের <string, string>
অভিধানের দরকার নেই।
জসন.এনইটি সম্ভবত এখন সি # অভিধানগুলিকে পর্যাপ্ত পর্যায়ে সিরিয়ালাইজ করেছে, তবে ওপি যখন মূলত এই প্রশ্নটি পোস্ট করেছিল তখন অনেক এমভিসি বিকাশকারী জাভাস্ক্রিপ্টসিরাইজার ক্লাসটি ব্যবহার করছিল কারণ এটি বাক্সের বাইরে ডিফল্ট বিকল্প ছিল।
যদি আপনি কোনও লিগ্যাসি প্রকল্পে (এমভিসি 1 বা এমভিসি 2) কাজ করে থাকেন এবং আপনি জসন.এনইটি ব্যবহার করতে না পারেন তবে আমি প্রস্তাব দিচ্ছি যে আপনি একটি এর List<KeyValuePair<K,V>>
পরিবর্তে একটি ব্যবহার করুন Dictionary<K,V>>
। উত্তরাধিকারী জাভাস্ক্রিপ্টসিরাইজার ক্লাস এই ধরণের সিরিয়ালাইজ করবে ঠিকই, তবে এটি অভিধানে সমস্যা রয়েছে।
ডকুমেন্টেশন: জসন.এনইটি দিয়ে সংগ্রহগুলি সিরিয়ালিং করা হচ্ছে
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<int, List<int>> foo = new Dictionary<int, List<int>>();
foo.Add(1, new List<int>( new int[] { 1, 2, 3, 4 }));
foo.Add(2, new List<int>(new int[] { 2, 3, 4, 1 }));
foo.Add(3, new List<int>(new int[] { 3, 4, 1, 2 }));
foo.Add(4, new List<int>(new int[] { 4, 1, 2, 3 }));
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Dictionary<int, List<int>>));
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, foo);
Console.WriteLine(Encoding.Default.GetString(ms.ToArray()));
}
}
}
}
এটি কনসোলে লিখবে:
[{\"Key\":1,\"Value\":[1,2,3,4]},{\"Key\":2,\"Value\":[2,3,4,1]},{\"Key\":3,\"Value\":[3,4,1,2]},{\"Key\":4,\"Value\":[4,1,2,3]}]
( using System.Web.Script.Serialization
)
এই কোড কোন রূপান্তর করবে Dictionary<Key,Value>
করার Dictionary<string,string>
এবং তারপর একটি JSON স্ট্রিংকে যেমন ধারাবাহিকভাবে:
var json = new JavaScriptSerializer().Serialize(yourDictionary.ToDictionary(item => item.Key.ToString(), item => item.Value.ToString()));
এটা লক্ষণীয় যে Dictionary<int, MyClass>
, জটিল টাইপ / অবজেক্টটি সংরক্ষণের সময় এই জাতীয় কিছুও এভাবে সিরিয়াল করা যেতে পারে।
var yourDictionary = new Dictionary<Key,Value>(); //This is just to represent your current Dictionary.
আপনি yourDictionary
আপনার আসল ভেরিয়েবলের সাথে পরিবর্তনশীলটি প্রতিস্থাপন করতে পারেন ।
var convertedDictionary = yourDictionary.ToDictionary(item => item.Key.ToString(), item => item.Value.ToString()); //This converts your dictionary to have the Key and Value of type string.
আমরা এটি করি, কারণ কী এবং মান উভয়ই টাইপের স্ট্রিং হতে হবে, এটির ক্রমিককরণের প্রয়োজন হিসাবে Dictionary
।
var json = new JavaScriptSerializer().Serialize(convertedDictionary); //You can then serialize the Dictionary, as both the Key and Value is of type string, which is required for serialization.
System.Web.Extensions
ক্লায়েন্ট ফ্রেমওয়ার্ক সংস্করণে নেই, তবে সম্পূর্ণ সংস্করণও প্রয়োজন।
দুঃখিত যদি সিনট্যাক্সটি সবচেয়ে ক্ষুদ্রতম বিট বন্ধ থাকে তবে আমি যে কোডটি থেকে এ পাচ্ছি তা মূলত ভিবিতে ছিল :)
using System.Web.Script.Serialization;
...
Dictionary<int,List<int>> MyObj = new Dictionary<int,List<int>>();
//Populate it here...
string myJsonString = (new JavaScriptSerializer()).Serialize(MyObj);
Asp.net মূল ব্যবহারে:
using Newtonsoft.Json
var obj = new { MyValue = 1 };
var json = JsonConvert.SerializeObject(obj);
var obj2 = JsonConvert.DeserializeObject(json);
System.Core
এবং তারপরে রেফারেন্স দেওয়ার চেষ্টা করেছি using Newtonsoft.Json
এবং আনন্দ নেই। আমি মনে করি Newtonsoft
একটি তৃতীয় পক্ষের লাইব্রেরি।
এটি কেবলমাত্র স্ট্যান্ডার্ড। মাইক্রোসফ্ট থেকে নেট লাইব্রেরি ব্যবহার করে কীভাবে করা যায় তা এখানে ...
using System.IO;
using System.Runtime.Serialization.Json;
private static string DataToJson<T>(T data)
{
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer serialiser = new DataContractJsonSerializer(
data.GetType(),
new DataContractJsonSerializerSettings()
{
UseSimpleDictionaryFormat = true
});
serialiser.WriteObject(stream, data);
return Encoding.UTF8.GetString(stream.ToArray());
}
Dictionary<string, dynamic>
এবং সমস্ত JSON আদিম ধরণের যেমন ইন্টিজার, ফ্লোটস, বুলিয়ানস, স্ট্রিংগুলি এমনকি নালগুলি এবং একটি বস্তুর মধ্যে রাখতে পারি। +1
আপনি জাভাস্ক্রিপ্টসিরাইজার ব্যবহার করতে পারেন ।
string
। আমি এখানে একটি উত্তর পোস্ট করেছি যার মধ্যে এটি অন্তর্ভুক্ত রয়েছে, যদি আপনি একবার দেখতে চান।
এটি অনেকগুলি বিভিন্ন লাইব্রেরি মনে হয় এবং যা আগের বছরগুলিতে এসেছিল এবং যা যায় বলে মনে হয় না। তবে ২০১ April সালের এপ্রিল পর্যন্ত, এই সমাধানটি আমার পক্ষে ভাল কাজ করেছে। স্ট্রিংগুলি সহজেই ints দ্বারা প্রতিস্থাপিত হয় ।
//outputfilename will be something like: "C:/MyFolder/MyFile.txt"
void WriteDictionaryAsJson(Dictionary<string, List<string>> myDict, string outputfilename)
{
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Dictionary<string, List<string>>));
MemoryStream ms = new MemoryStream();
js.WriteObject(ms, myDict); //Does the serialization.
StreamWriter streamwriter = new StreamWriter(outputfilename);
streamwriter.AutoFlush = true; // Without this, I've run into issues with the stream being "full"...this solves that problem.
ms.Position = 0; //ms contains our data in json format, so let's start from the beginning
StreamReader sr = new StreamReader(ms); //Read all of our memory
streamwriter.WriteLine(sr.ReadToEnd()); // and write it out.
ms.Close(); //Shutdown everything since we're done.
streamwriter.Close();
sr.Close();
}
দুটি আমদানি পয়েন্ট। প্রথমে ভিজুয়াল স্টুডিওর সলিউশন এক্সপ্লোরারের অভ্যন্তরে আপনার প্রকল্পের রেফারেন্স হিসাবে সিস্টেম.রুনটাইম.সিরলাইজেশন যুক্ত করার বিষয়টি নিশ্চিত করুন। দ্বিতীয়ত, এই লাইনটি যুক্ত করুন,
using System.Runtime.Serialization.Json;
আপনার অবশিষ্ট ব্যবহারের সাথে ফাইলের শীর্ষে, যাতে DataContractJsonSerializer
ক্লাসটি পাওয়া যায়। এই ব্লগ পোস্ট সিরিয়ালকরণের এই পদ্ধতি সম্পর্কে আরও তথ্য রয়েছে।
আমার ডেটা 3 টি স্ট্রিং সহ একটি অভিধান, প্রতিটি স্ট্রিংয়ের তালিকার দিকে নির্দেশ করে। স্ট্রিংগুলির তালিকার দৈর্ঘ্য 3, 4 এবং 1 রয়েছে The
StringKeyofDictionary1 => ["abc","def","ghi"]
StringKeyofDictionary2 => ["String01","String02","String03","String04"]
Stringkey3 => ["someString"]
ফাইলটিতে লেখা আউটপুটটি এক লাইনে থাকবে, এখানে ফর্ম্যাট করা আউটপুট রয়েছে:
[{
"Key": "StringKeyofDictionary1",
"Value": ["abc",
"def",
"ghi"]
},
{
"Key": "StringKeyofDictionary2",
"Value": ["String01",
"String02",
"String03",
"String04",
]
},
{
"Key": "Stringkey3",
"Value": ["SomeString"]
}]
এটি Merrit এর আগে যা পোস্ট করেছে তার অনুরূপ। শুধু সম্পূর্ণ কোড পোস্ট
string sJSON;
Dictionary<string, string> aa1 = new Dictionary<string, string>();
aa1.Add("one", "1"); aa1.Add("two", "2"); aa1.Add("three", "3");
Console.Write("JSON form of Person object: ");
sJSON = WriteFromObject(aa1);
Console.WriteLine(sJSON);
Dictionary<string, string> aaret = new Dictionary<string, string>();
aaret = ReadToObject<Dictionary<string, string>>(sJSON);
public static string WriteFromObject(object obj)
{
byte[] json;
//Create a stream to serialize the object to.
using (MemoryStream ms = new MemoryStream())
{
// Serializer the object to the stream.
DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(ms, obj);
json = ms.ToArray();
ms.Close();
}
return Encoding.UTF8.GetString(json, 0, json.Length);
}
// Deserialize a JSON stream to object.
public static T ReadToObject<T>(string json) where T : class, new()
{
T deserializedObject = new T();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedObject.GetType());
deserializedObject = ser.ReadObject(ms) as T;
ms.Close();
}
return deserializedObject;
}
যদি আপনার প্রসঙ্গটি এটি (প্রযুক্তিগত বাধা ইত্যাদি) মঞ্জুরি দেয় তবে নিউটোনসফট.জসনJsonConvert.SerializeObject
থেকে পদ্ধতিটি ব্যবহার করুন : এটি আপনার জীবনকে আরও সহজ করে তুলবে।
Dictionary<string, string> localizedWelcomeLabels = new Dictionary<string, string>();
localizedWelcomeLabels.Add("en", "Welcome");
localizedWelcomeLabels.Add("fr", "Bienvenue");
localizedWelcomeLabels.Add("de", "Willkommen");
Console.WriteLine(JsonConvert.SerializeObject(localizedWelcomeLabels));
// Outputs : {"en":"Welcome","fr":"Bienvenue","de":"Willkommen"}