我有一个问题是反序列化一个具有其中方法的类,一旦反序列化该对象就应该触发该类。 出于这个问题的目的,我将尽可能地简化问题。
public class Cat:IAnimal
{
public string CatBreed{get;set;}
public void Sounds()
{
console.log("Meow")
}
}
public class Dog:IAnimal
{
public string DogBreed{get;set;}
public void Sounds()
{
console.log("Woof");
}
}
public interface IAnimal
{
void Sounds();
}
因此,在某些地方,两个类都被实例化和序列化,并被转发到同一个地方进行反序列化,在这个类中,我们只需触发Sounds方法就不重要。 所以这不起作用,因为无法创建界面实例
JsonConvert.DeserializeObject<IAnimal>(json)
但是因为我知道到达的对象肯定会有方法Sounds()我尝试将它转换为动态或普通的对象,这导致发现JsonConvert正在将对象和动态转换为JObject,并且方法Sounds不能被调用,因为JObject没有它的定义。如果为DeserializeObject提供特定的类,该方法将存在并按预期工作,但为了完全通用,我需要以这种或类似的方式调用它。
有没有办法实现这个目标?