C# 将接口类型对象保存到IsolatedStorage设置、序列化
我需要存储实现Windows Phone 8 IsolatedStorageSettings.ApplicationSettings IAnimal接口的列表对象C# 将接口类型对象保存到IsolatedStorage设置、序列化,c#,windows-phone-8,serialization,interface,isolatedstorage,C#,Windows Phone 8,Serialization,Interface,Isolatedstorage,我需要存储实现Windows Phone 8 IsolatedStorageSettings.ApplicationSettings IAnimal接口的列表对象 public class Cat : IAnimal { string Name { get; set; } } public class Dog: IAnimal { string Name { get; set; } } 我的动物界面如下所示: public interface IAnimal { s
public class Cat : IAnimal
{
string Name { get; set; }
}
public class Dog: IAnimal
{
string Name { get; set; }
}
我的动物界面如下所示:
public interface IAnimal
{
string Name { get; }
}
然后我要将不同的动物存储到隔离存储设置。应用程序设置
public class Cat : IAnimal
{
string Name { get; set; }
}
public class Dog: IAnimal
{
string Name { get; set; }
}
我有获取/设置动物列表的方法
public IReadOnlyCollection<IAnimal> GetAnimals()
{
return (List<IAnimal>)storage["animals"];
}
public void AddAnimal(IAnimal animal)
{
List<IAnimal> animals = (List<IAnimal>)storage["animals"];
animals.Insert(0, (IAnimal)animal);
this.storage["animals"] = animals;
this.storage.Save();
}
如果我使用这些方法,我将获得System.Runtime.Serialization.SerializationException,元素包含数据协定的数据。反序列化程序不知道映射到此协定的任何类型。将与“Cat”对应的类型添加到已知类型列表中-例如,使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表中
我也尝试过给猫和狗添加KnownType属性,但没有成功
当我只知道对象实现了某些接口时,这是将对象存储到IsolatedStorageSettings的正确方法吗?我怀疑您将KnownType属性放置在了错误的位置。当我使用它时,我总是将它添加到基类中 例如:
public interface IAnimal
{
string Name { get; }
}
[KnownType(typeof(Cat))]
[KnownType(typeof(Dog))]
public class Animal: IAnimal
{
string Name { get; }
}
public class Cat : Animal
{
string Name { get; set; }
}
public class Dog: Animal
{
string Name { get; set; }
}
现在我没有任何基类动物,所有不同的动物都直接实现IAnimal接口。但我会像你解释的那样尝试添加基类。你必须记住,接口只是类承诺实现的契约。序列化/反序列化时,实际上是序列化/反序列化类,而不是接口。