Xamarin Forms - حفظ الكائن للوصول إليه لاحقًا

0

أنا أستخدم Xamarin Forms مع Newtonsoft.JSON و Xam.Plugin.Settings plugins لحفظ كائن IDevice مثل JSON لاستخدامه لاحقًا. الصفحة الأولى:

private async void SelectBluetoothDevice(object sender, SelectedItemChangedEventArgs e)
{
    string device = JsonConvert.SerializeObject((IDevice) e.SelectedItem);
    AppSettings.AddOrUpdateValue("device", device);
    await Navigation.PopAsync();
}

هنا أقوم ببساطة بعمل العنصر المحدد إلى سلسلة JSON وحفظه. يعمل كما يجب أن يكون. لكن المشكلة التي أواجهها تأتي كلما حاولت نزع التسلسل من السلسلة المحفوظة.

string device = AppSettings.GetValueOrDefault("device", "");
if (!device.Equals(""))
{
    Debug.WriteLine(device);
    // This line produces error
    IDevice dev = JsonConvert.DeserializeObject<IDevice>(device);
    settingsDeviceName.Text = dev.Name;
}

Newtonsoft.Json.JsonSerializationException: Could not create an instance of type Plugin.BLE.Abstractions.Contracts.IDevice. Type is an interface or abstract class and cannot be instantiated. Path 'BluetoothDevice', line 1, position 19.

لذلك أنا أفهم أن IDevice هي واجهة ولا يمكن إلغاء تسلسل سلسلة JSON الخاصة بي إلا في كائن. أي أفكار جيدة حول كيفية حلها؟ شكر!

1 إجابة

2
افضل جواب

هذا الخط JsonConvert.DeserializeObject<IDevice>(device); يقوم بهذا بشكل أساسي:

  • اقرأ JSON في device
  • حاول إنشاء نوع الكائن الذي تريد إلغاء تسلسله إليه ، في هذه الحالة ، IDevice
  • نعيد لك الكائن الجديد بكل الخصائص

تكمن المشكلة في الخطوة 2. لا يمكنك إنشاء مثيل لواجهة. لذلك تحتاج إلى إلغاء التسلسل إلى كائن ملموس ينفذ IDevice .

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام