۱۳۸۸/۰۱/۰۷

آشنايي با كلاس JavaScriptSerializer


براي استفاده از jQuery Ajax يكي از روش‌هاي ارسال ديتا به برنامه، تبديل داده‌ها به فرمت JSON مي‌باشد. براي داده‌هاي ساده، تشخيص اين فرمت ساده است. مثلا اگر امضاي تابع وب سرويس اجكس ما به صورت زير باشد:
public static bool IsUserAvailable(string username)
اطلاعات جي‌سوني را كه قرار است ارسال كنيم، فرمت زير را بايد داشته باشد:
{'username':'value'}
حال اگر آرگومان‌هاي ما پيچيده‌تر بودند چطور؟ مثلا بجاي يك رشته ساده، يك ليست جنريك داشتيم، فرمت ورودي را چگونه بايد تشخيص داد؟
براي اين منظور در دات نت 3 و نيم، كلاسي جهت انجام اينگونه تبديلات پيش بيني شده است كه شرح مختصر آن به صورت زير است:
ابتدا بايد ارجاعي را به اسمبلي system.web.extensions به برنامه افزود و سپس جهت سهولت كار مي‌توان يك extension method از كلاس JavaScriptSerializer مهيا در فضاي نام System.Web.Script.Serialization ايجاد كرد:

public static string ToJson(this object data)
{
return new JavaScriptSerializer().Serialize(data);
}
اكنون چند مثال زير را در نظر بگيريد:
        public static string GetJsonTest0()
{
var data = "a1";
return data.ToJson();
}

public static string GetJsonTest1()
{
var data = new List<string> { "a1", "a2", "a3" };
return data.ToJson();
}

public static string GetJsonTest2()
{

var lst =
new List<KeyValuePair<string, object>>
{
new KeyValuePair<string, object>("Name", "علي"),
new KeyValuePair<string, object>("Number", 10),
new KeyValuePair<string, object>("Desc", "منابع مورد نياز")
};

return lst.ToJson();

}
خروجي‌هاي آن‌ها به ترتيب به صورت زير خواهند بود:

"a1"
["a1","a2","a3"]
[{"Key":"Name","Value":"علي"},{"Key":"Number","Value":10},{"Key":"Desc","Value":"منابع مورد نياز"}]

اين كلاس همچنين قابليت Deserialize و تبديل داده‌هايي به فرمت JSON به اشياء مورد نظر ما را نيز دارا است.