البرمجة

تحديث الربط لقيم العشرية في ASP.NET Core

في تطبيق aspnet core الخاص بك، تواجه مشكلة في الربط (binding) للأرقام العشرية (decimal) عند استخدام ثقافة (Culture) غير الإنجليزية. تحديدًا، عندما تقوم بإرسال قيمة decimal من خلال JSON باستخدام النقطة كفاصل عشري، فإن الربط لا يعمل بسبب اختلاف الثقافة، وبالتالي يتم تحويل القيمة إلى صفر. ومن الجهة الأخرى، عند استخدام الفاصلة كفاصل عشري في ال JSON، يتم الربط بشكل صحيح.

التحديثات التي قمت بها في تطبيقك تشير إلى استخدام الثقافة الإسبانية (es-AR)، حيث يستخدم الفاصلة كفاصل عشري بدلاً من النقطة.

لحل هذه المشكلة، يمكنك استخدام تقنية معالجة (Model Binding) مخصصة لقبول القيم العشرية بكلا الفاصلتين (النقطة والفاصلة). يمكن القيام بذلك عن طريق إنشاء محول (Converter) خاص لنوع البيانات decimal.

فيما يلي خطوات تقديم الحل:

  1. إنشاء محول (Converter) مخصص للربط بين ال JSON ونوع البيانات decimal.

  2. في المحول المخصص، تحقق من النص الممثل للقيمة decimal في ال JSON، وقم بتحويله إلى decimal بطريقة تدعم كلا الفاصلتين.

  3. قم بتكوين محول ال JSON ليستخدم المحول المخصص لنوع البيانات decimal.

باستخدام هذا الحل، يمكن لتطبيقك الآن قبول القيم العشرية بكلا الفاصلتين بنجاح، سواء كانت النقطة أو الفاصلة.

أتمنى أن يكون هذا الحل مفيدًا لك وأن يساعدك في حل مشكلتك بشكل ناجح.

المزيد من المعلومات

بالطبع، إليك الاستكمال:

إكمال المقال:

  1. إنشاء محول (Converter) مخصص:

    يجب أولاً إنشاء محول خاص لنوع البيانات decimal يستخدمه Model Binding في ASP.NET Core. يمكنك القيام بذلك عن طريق إنشاء فئة تمتد من JsonConverter وتطبيق السلوك المطلوب لتحويل القيم.

    csharp
    using System; using System.Globalization; using Newtonsoft.Json; public class DecimalConverter : JsonConverter<decimal> { public override decimal ReadJson(JsonReader reader, Type objectType, decimal existingValue, bool hasExistingValue, JsonSerializer serializer) { var value = reader.Value?.ToString(); if (decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal result)) { return result; } if (decimal.TryParse(value, NumberStyles.Any, CultureInfo.GetCultureInfo("es-AR"), out result)) { return result; } throw new JsonSerializationException("Invalid decimal value."); } public override void WriteJson(JsonWriter writer, decimal value, JsonSerializer serializer) { writer.WriteValue(value); } }
  2. تكوين محول ال JSON لاستخدام المحول المخصص:

    بعد إنشاء محول ال JSON المخصص، يجب تكوين Model Binding ليستخدمه. يمكنك القيام بذلك في Startup.cs، في طريقة ConfigureServices:

    csharp
    services .AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new DecimalConverter()); });

    أو إذا كنت تستخدم Newtonsoft.Json، يمكنك تكوينه في ConfigureServices كالتالي:

    csharp
    services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.Converters.Add(new DecimalConverter()); });

    بعد إجراء هذه الخطوات، سيقوم Model Binding بتحويل القيم العشرية المقدمة في ال JSON بشكل صحيح، سواء استخدمت النقطة أو الفاصلة كفاصل عشري، مما يسمح لتطبيقك بتلبية متطلبات الثقافة الإسبانية والإنجليزية على حد سواء.

بهذه الطريقة، ستكون قد حللت المشكلة التي واجهتك بشكل ناجح، ويمكن لتطبيقك الآن قبول القيم العشرية بأي فاصلة تناسب ثقافة الطلب الوارد.

ختامًا:

من خلال استخدام محول JSON مخصص وتكوينه بشكل صحيح، يمكنك الآن تجاوز تحدي الربط مع القيم العشرية في ثقافة غير الإنجليزية في تطبيق aspnet core الخاص بك. تأكد من اختبار التطبيق بشكل شامل لضمان أن الربط يعمل بشكل صحيح بغض النظر عن الفاصلة المستخدمة، وبذلك تكون قد أتممت تحسيناتك بشكل كامل وتحققت من جاهزية تطبيقك لاستخدامه في البيئات متعددة اللغات.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر