• 1400/04/15

استفاده از SerializeAsync در متغیر totpTempDataModel :

درود بر استاد بزرگوار.

در آموزش ورود با موبایل، برای ذخیره اطلاعات مربوط به کد تاییدیه، اطلاعات را با کد زیر serialize/deserialize کردید :

var totpTempDataModel =JsonSerializer.Deserialize<PhoneTotpTempDataModel>(TempData["PTC"].ToString()!);


TempData["PTC"] = JsonSerializer.Serialize(new PhoneTotpTempDataModel()
.   .   .  //Continued

سوال اول: آیا نیازی نبود به Async تبدیل بشند؟ و اگه نیاز هست ممنون میشم یه راهنمایی برای کدهای Async بفرمایید. چون با کدی شبیه زیر می تونم SerializeAsync کنم ولی توی Deserialize مانده شدم :

string async = null;
using (var stream = new MemoryStream())
    {
      await System.Text.Json.JsonSerializer.SerializeAsync(stream, rvm, rvm.GetType());
      stream.Position = 0;
      using var reader = new StreamReader(stream);
      async = await reader.ReadToEndAsync();
    }

 

 

سوال دوم: در حال حاضر به دلیل استفاده از کپچا توی برنامه ام، session فعال هست توی startup.cs و زمان اعتبار session ده دقیقه هست. خواستم بدونم می تونم بجای ذخیره اطلاعات مربوط به کد فعالسازی موبایل کاربر توی TempData["PTC"] اگه از session استفاده کنم :

HttpContext.Session.SetInt32("smsCode", smsCode);
HttpContext.Session.GetInt32("smsCode").ToString(); 

و البته به صورت دستی زمان را چک کنم که مثلا بیش از دو دقیقه شده نامعتبر باشه ، آیا این روش مزیت داره بجز اینکه به نظرم یک کم کد نویسی ساده تری نسبت به  TempData, Keep و این داستان ها داره آیا تفاوت دیگری هست؟ 

تفاوت tempdata و session را مطالعه کردم خواستم نظر نهایی شما را بدونم.

https://www.c-sharpcorner.com/blogs/tempdata-vs-session-in-mvc1

 

 

 

 

  • 1400/04/15
  • ساعت 13:37

سلام عزیز.

برای سوال json-async :

طبق سرچی که کردم ظاهرا زمانی که یک عملیات stream-async دارین میشه از متود های json-async استفاده کرد. مثلا میخوایم یک کلاس رو به json تبدیل کنیم و داخل فایل بریزیم :

            var weatherForecast = new WeatherForecast
            {
                Date = DateTime.Parse("2019-08-01"),
                TemperatureCelsius = 25,
                Summary = "Hot"
            };

            string fileName = "WeatherForecast.json";
            using FileStream createStream = File.Create(fileName);
            await JsonSerializer.SerializeAsync(createStream, weatherForecast);
            await createStream.DisposeAsync();

البته 100% مطمئن نیستم ممکنه جاهای دیگه هم بشه استفاده کرد ولی خوب مثال هایی که من دیدم بیشتر در این مورد بودش. لینک زیر رو مشاهده کنید و یه سرچ کنید async مثال هایی که زده رو میتونید ببینید :

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0

و توی این شرایطی که الان داریم فکر میکنم بهتره از همون متود های معمولی استفاده بشه برای تبدیل به json، چون هم کلاس هامون خیلی کوچیک هستند و هم داخل رم آماده استفاده اند و فکر میکنم overhead استفاده از متود های async ( ایجاد stream و ... ) سرعت رو کمتر هم بکنه و هیچ نکته مثبتی نداشته باشه.

 

برای قسمت دوم سوالتون :

فکر میکنم داخل جلسات هم گفته باشم که دلیل اصلی استفاده از TempData این بود که مطمئن باشیم بعد از اینکه یکبار اطلاعات رو از داخلش خوندیم، اطلاعات پاک میشوند. اگر فکر میکنید حواستون به زمان حذف کردن یا حذف نکردن این اطلاعات هستش، از هر روشی بخواید میتونید استفاده بکنید و فرق آنچنانی نداره. فقط حواستون باشه داخل سشن و TempData اطلاعات رمزنگاری شده داخل کوکی کاربر نگه داری میشوند، اگر میخواید کوکی دستی ایجاد کنید حتما رمزنگاری بکنیدش.


logo-samandehi