Xamarin Forms-保存对象以供以后使用

时间:2018-07-30 16:04:58

标签: json xamarin.forms bluetooth-lowenergy

我正在将Xamarin Forms与Newtonsoft.JSON和Xam.Plugin.Settings插件一起使用,以将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:无法创建   类型Plugin.BLE.Abstractions.Contracts.IDevice的实例。类型是   接口或抽象类,无法实例化。路径   'BluetoothDevice',第1行,位置19。

所以我知道IDevice是接口,并且我的JSON字符串只能反序列化为对象。有什么好主意如何解决吗?谢谢!

1 个答案:

答案 0 :(得分:2)

此行JsonConvert.DeserializeObject<IDevice>(device);基本上是这样做的:

  • 读取device中的JSON
  • 尝试创建要反序列化的对象类型,在这种情况下为IDevice
  • 返回具有所有属性的新对象

问题出在步骤2。您无法创建接口的实例。因此,您需要反序列化为实现IDevice的具体对象。