从JObject中的原始类访问通用的反序列化方法,该类是从接口

时间:2017-09-11 16:02:13

标签: c# json.net deserialization

我有一个问题是反序列化一个具有其中方法的类,一旦反序列化该对象就应该触发该类。 出于这个问题的目的,我将尽可能地简化问题。

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提供特定的类,该方法将存在并按预期工作,但为了完全通用,我需要以这种或类似的方式调用它。

有没有办法实现这个目标?

0 个答案:

没有答案