我正在将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字符串只能反序列化为对象。有什么好主意如何解决吗?谢谢!
答案 0 :(得分:2)
此行JsonConvert.DeserializeObject<IDevice>(device);
基本上是这样做的:
device
中的JSON IDevice
问题出在步骤2。您无法创建接口的实例。因此,您需要反序列化为实现IDevice
的具体对象。