ইউনিটি যোগ JsonUtility পর তাদের API- এ 5.3.3 আপডেট করুন। আপনি আরও জটিল কিছু না করে তৃতীয় পক্ষের সমস্ত লাইব্রেরিগুলি সম্পর্কে ভুলে যান। জসন ইউটিলিটি অন্যান্য জসন লাইব্রেরির তুলনায় দ্রুত। ইউনিটি 5.3.3 সংস্করণ বা তারপরে আপডেট করুন তারপরে নীচের সমাধানটি চেষ্টা করুন।
JsonUtilityএকটি হালকা এপিআই। কেবল সহজ প্রকারের সমর্থিত। এটি অভিধানের মতো সংগ্রহগুলিকে সমর্থন করে না । এক ব্যতিক্রম নয় List। এটি সমর্থন করে Listএবং Listঅ্যারে!
আপনার যদি সিরিয়ালাইজ Dictionaryকরতে বা সাধারণ ডেটাটাইপগুলি কেবল সিরিয়ালাইজেশন এবং ডিসরিয়ালাইজিং ব্যতীত অন্য কিছু করতে হয় তবে একটি তৃতীয় পক্ষের API ব্যবহার করুন। অন্যথায়, পড়া চালিয়ে যান।
ক্রমিক উদাহরণ উদাহরণস্বরূপ:
[Serializable]
public class Player
{
public string playerId;
public string playerLoc;
public string playerNick;
}
১. একটি ডেটা অবজেক্ট (নন-অ্যারে জেএসন)
ধারাবাহিকী খণ্ড A :
পদ্ধতিটি দিয়ে জসনকে সিরিয়াল করুনpublic static string ToJson(object obj); ।
Player playerInstance = new Player();
playerInstance.playerId = "8484239823";
playerInstance.playerLoc = "Powai";
playerInstance.playerNick = "Random Nick";
string playerToJson = JsonUtility.ToJson(playerInstance);
Debug.Log(playerToJson);
আউটপুট :
{"playerId":"8484239823","playerLoc":"Powai","playerNick":"Random Nick"}
খণ্ড বি ধারাবাহিকতা :
public static string ToJson(object obj, bool prettyPrint);পদ্ধতি ওভারলোড দিয়ে জসনকে সিরিয়াল করুন । কেবল ফাংশনে পাস trueকরা JsonUtility.ToJsonডেটা ফর্ম্যাট করবে। উপরের আউটপুটটির সাথে নীচে আউটপুটটির তুলনা করুন।
Player playerInstance = new Player();
playerInstance.playerId = "8484239823";
playerInstance.playerLoc = "Powai";
playerInstance.playerNick = "Random Nick";
string playerToJson = JsonUtility.ToJson(playerInstance, true);
Debug.Log(playerToJson);
আউটপুট :
{
"playerId": "8484239823",
"playerLoc": "Powai",
"playerNick": "Random Nick"
}
অংশ A কে নিষ্পত্তির :
public static T FromJson(string json);পদ্ধতির ওভারলোড দিয়ে জেসনকে ডিসরিয়ালাইজ করুন ।
string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";
Player player = JsonUtility.FromJson<Player>(jsonString);
Debug.Log(player.playerLoc);
খণ্ড বি বিহীন করা :
public static object FromJson(string json, Type type);পদ্ধতির ওভারলোড দিয়ে জেসনকে ডিসরিয়ালাইজ করুন ।
string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";
Player player = (Player)JsonUtility.FromJson(jsonString, typeof(Player));
Debug.Log(player.playerLoc);
অংশ সি সিলেসিয়েজিং :
public static void FromJsonOverwrite(string json, object objectToOverwrite);পদ্ধতিটি সহ জসনকে ডিসরিয়ালাইজ করুন । কখন JsonUtility.FromJsonOverwriteব্যবহৃত হয়, সেই অবজেক্টের কোনও নতুন উদাহরণ তৈরি করা হবে না যার জন্য আপনি deserializing করছেন। এটি কেবল আপনি যে উদাহরণটি পাস করেছেন তা পুনরায় ব্যবহার করবে এবং এর মানগুলি ওভাররাইট করবে।
এটি দক্ষ এবং সম্ভব হলে ব্যবহার করা উচিত।
Player playerInstance;
void Start()
{
playerInstance = new Player();
deserialize();
}
void deserialize()
{
string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";
JsonUtility.FromJsonOverwrite(jsonString, playerInstance);
Debug.Log(playerInstance.playerLoc);
}
২. একাধিক ডেটা (এয়ার জেএসন)
আপনার জসনে একাধিক ডেটা অবজেক্ট রয়েছে। উদাহরণস্বরূপ একাধিকবারplayerId হাজির । ইউনিটি এর অ্যারে সমর্থন করে না কারণ এটি এখনও নতুন রয়েছে তবে আপনি অ্যারের সাথে কাজ করতে এই ব্যক্তির সাহায্যকারী শ্রেণিটি ব্যবহার করতে পারেন ।JsonUtilityJsonUtility
বলা একটি ক্লাস তৈরি করুন JsonHelper। নীচে থেকে সরাসরি জসনহেল্পার অনুলিপি করুন।
public static class JsonHelper
{
public static T[] FromJson<T>(string json)
{
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
return wrapper.Items;
}
public static string ToJson<T>(T[] array)
{
Wrapper<T> wrapper = new Wrapper<T>();
wrapper.Items = array;
return JsonUtility.ToJson(wrapper);
}
public static string ToJson<T>(T[] array, bool prettyPrint)
{
Wrapper<T> wrapper = new Wrapper<T>();
wrapper.Items = array;
return JsonUtility.ToJson(wrapper, prettyPrint);
}
[Serializable]
private class Wrapper<T>
{
public T[] Items;
}
}
জেসন অ্যারে সিরিয়ালাইজিং :
Player[] playerInstance = new Player[2];
playerInstance[0] = new Player();
playerInstance[0].playerId = "8484239823";
playerInstance[0].playerLoc = "Powai";
playerInstance[0].playerNick = "Random Nick";
playerInstance[1] = new Player();
playerInstance[1].playerId = "512343283";
playerInstance[1].playerLoc = "User2";
playerInstance[1].playerNick = "Rand Nick 2";
string playerToJson = JsonHelper.ToJson(playerInstance, true);
Debug.Log(playerToJson);
আউটপুট :
{
"Items": [
{
"playerId": "8484239823",
"playerLoc": "Powai",
"playerNick": "Random Nick"
},
{
"playerId": "512343283",
"playerLoc": "User2",
"playerNick": "Rand Nick 2"
}
]
}
জসন অ্যারে ডিসরিয়ালাইজিং :
string jsonString = "{\r\n \"Items\": [\r\n {\r\n \"playerId\": \"8484239823\",\r\n \"playerLoc\": \"Powai\",\r\n \"playerNick\": \"Random Nick\"\r\n },\r\n {\r\n \"playerId\": \"512343283\",\r\n \"playerLoc\": \"User2\",\r\n \"playerNick\": \"Rand Nick 2\"\r\n }\r\n ]\r\n}";
Player[] player = JsonHelper.FromJson<Player>(jsonString);
Debug.Log(player[0].playerLoc);
Debug.Log(player[1].playerLoc);
আউটপুট :
পোওয়াই
ইউজার 2
এটি সার্ভার থেকে যদি জসন অ্যারে হয় এবং আপনি এটি হাতে তৈরি করেন নি :
আপনাকে {"Items":প্রাপ্ত স্ট্রিংয়ের সামনে যুক্ত করতে }হবে তার শেষে এটি যুক্ত করতে হবে।
আমি এর জন্য একটি সাধারণ ফাংশন করেছি:
string fixJson(string value)
{
value = "{\"Items\":" + value + "}";
return value;
}
তাহলে আপনি এটি ব্যবহার করতে পারেন:
string jsonString = fixJson(yourJsonFromServer);
Player[] player = JsonHelper.FromJson<Player>(jsonString);
৩. শ্রেণি ছাড়াই জেসন স্ট্রিংটি ডিজায়ালাইজ করুন & সংখ্যার বৈশিষ্ট্য সহ জসনকে ডি-সিরিয়ালিং করুন
এটি এমন একটি জসন যা সংখ্যার বা সংখ্যার বৈশিষ্ট্য দিয়ে শুরু হয়।
উদাহরণ স্বরূপ:
{
"USD" : {"15m" : 1740.01, "last" : 1740.01, "buy" : 1740.01, "sell" : 1744.74, "symbol" : "$"},
"ISK" : {"15m" : 179479.11, "last" : 179479.11, "buy" : 179479.11, "sell" : 179967, "symbol" : "kr"},
"NZD" : {"15m" : 2522.84, "last" : 2522.84, "buy" : 2522.84, "sell" : 2529.69, "symbol" : "$"}
}
ইউনিটি এর JsonUtilityএই সমর্থন করে না কারণ "15" সম্পত্তি একটি সংখ্যা দিয়ে শুরু হয়। একটি শ্রেণীর পরিবর্তনশীল কোনও পূর্ণসংখ্যার সাথে শুরু করতে পারে না।
SimpleJSON.csইউনিটির উইকি থেকে ডাউনলোড করুন ।
ইউএসডি এর "15 মি" সম্পত্তি পেতে:
var N = JSON.Parse(yourJsonString);
string price = N["USD"]["15m"].Value;
Debug.Log(price);
আইএসকে "15 মি" সম্পত্তি পেতে:
var N = JSON.Parse(yourJsonString);
string price = N["ISK"]["15m"].Value;
Debug.Log(price);
এনজেডডির "15 মি" সম্পত্তি পেতে:
var N = JSON.Parse(yourJsonString);
string price = N["NZD"]["15m"].Value;
Debug.Log(price);
সংখ্যার অঙ্কের সাথে শুরু না হওয়া বাকি জসন বৈশিষ্ট্যগুলি ইউনিটির জসন ইউটিলিটি পরিচালনা করতে পারে।
4. ট্রাবলশূটিং জসন ইউটিলিটি:
সিরিয়াল করার সময় সমস্যা JsonUtility.ToJson?
খালি স্ট্রিং পাচ্ছেন নাকি " {}" দিয়ে JsonUtility.ToJson?
ক । ক্লাসটি কোনও অ্যারে না রয়েছে তা নিশ্চিত করুন। যদি তা হয় তবে এর JsonHelper.ToJsonপরিবর্তে উপরের সহায়ক শ্রেণিটি ব্যবহার করুন JsonUtility.ToJson।
খ । [Serializable]আপনি যে শ্রেণীরিকরণ করছেন তার শীর্ষে যুক্ত করুন ।
গ । শ্রেণি থেকে সম্পত্তি সরান। উদাহরণস্বরূপ, চলকটিতে, public string playerId { get; set; } সরান { get; set; } । Ityক্য এটি সিরিয়াল করতে পারে না।
যখন ডিসরিয়ালাইজ হচ্ছে তখন সমস্যা JsonUtility.FromJson?
ক । যদি আপনি পান তবে Nullনিশ্চিত হয়ে নিন যে জসন কোনও জসন অ্যারে নয়। যদি তা হয় তবে এর JsonHelper.FromJsonপরিবর্তে উপরের সহায়ক শ্রেণিটি ব্যবহার করুন JsonUtility.FromJson।
খ । যদি আপনি NullReferenceExceptionডিসরিয়ালাইজ [Serializable]করার সময় পান তবে ক্লাসের শীর্ষে যুক্ত করুন ।
সি । অন্য কোনও সমস্যা, আপনার জসন বৈধ কিনা তা যাচাই করুন। এখানে এই সাইটে যান এবং জসন পেস্ট করুন। এটি জাসন বৈধ কিনা তা আপনাকে দেখাতে হবে। এটি জাসনের সাথে যথাযথ শ্রেণি তৈরি করা উচিত। কেবল প্রতিটি ভেরিয়েবল থেকে অপসারণ { get; set; } এবং প্রতিটি [Serializable]উত্পন্ন উত্পন্ন শ্রেণীর শীর্ষে যুক্ত করার বিষয়টি নিশ্চিত করুন ।
নিউটনসফট.জসন:
যদি কোনও কারণে নিউটনসফট.জসন ব্যবহার করা আবশ্যক তবে এখানে ইউনিটির জন্য কাঁটাযুক্ত সংস্করণটি দেখুন । নোট করুন যে নির্দিষ্ট বৈশিষ্ট্য ব্যবহার করা থাকলে আপনি ক্রাশের অভিজ্ঞতা পেতে পারেন। সাবধান হও.
আপনার প্রশ্নের উত্তর দিতে :
আপনার মূল ডেটা হ'ল
[{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]
যোগ {"Items": মধ্যে সামনের তা তারপর যোগ } সময়ে শেষ এটি।
এটি করার কোড:
serviceData = "{\"Items\":" + serviceData + "}";
এখন তোমার আছে:
{"Items":[{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]}
করতে ধারাবাহিকভাবে একাধিক যেমন পিএইচপি থেকে ডেটা অ্যারে , আপনি এখন কি করতে পারেন
public player[] playerInstance;
playerInstance = JsonHelper.FromJson<player>(serviceData);
playerInstance[0] আপনার প্রথম তথ্য
playerInstance[1] আপনার দ্বিতীয় তথ্য
playerInstance[2] আপনার তৃতীয় ডেটা
অথবা সঙ্গে বর্গ ভিতরে তথ্য playerInstance[0].playerLoc, playerInstance[1].playerLoc, playerInstance[2].playerLoc......
playerInstance.Lengthঅ্যাক্সেস করার আগে আপনি দৈর্ঘ্যটি পরীক্ষা করতে ব্যবহার করতে পারেন ।
দ্রষ্টব্য: ক্লাস থেকে সরান । আপনার যদি থাকে , এটি কাজ করবে না। Asক্য শ্রেণীর সদস্যদের সাথে কাজ করে না যা সম্পত্তি হিসাবে সংজ্ঞায়িত হয় ।{ get; set; }player{ get; set; }JsonUtility
[এবং]? এটাই এটিকে তালিকা তৈরি করে। কেবল এটি অপসারণ বন্ধ করুন এবং এটিকে একটি অ্যারে বা একটি তালিকা হিসাবে ডিজিজারাইজ করুন এবং আমি আশা করি এটি ঠিক আছে। আপনি চেষ্টা করেছেন যে কোড পোস্ট করুন।