我试图将JSON字符串反序列化为具体类,该类继承自抽象类,但我无法使其工作.我用Google搜索并尝试了一些解决方案,但它们似乎也没有用.
这就是我现在拥有的:
abstract class AbstractClass { }
class ConcreteClass { }
public AbstractClass Decode(string jsonString)
{
JsonSerializerSettings jss = new JsonSerializerSettings();
jss.TypeNameHandling = TypeNameHandling.All;
return (AbstractClass)JsonConvert.DeserializeObject(jsonString, null, jss);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试转换生成的对象,它就不起作用.
我不使用DeserializeObject的原因是我有很多具体的类.
有什么建议?
编辑:澄清问题:
我已经重写了基类型的 JsonConverter (通过应用于[JsonConverter(typeof(TConverter))]超类),但是当直接反序列化子类型时,我想使用 STANDARD 序列化(即没有自定义转换器)来反序列化我的派生对象。如何指定在反序列化方法中使用的标准序列化,就好像我没有覆盖 JsonConverter 一样?
我正在使用弹性搜索,无法使用 JsonConverter 的自定义实现调用 JsonConvert.DeserializeObject,并且必须依赖 Elastic 的属性来使用我的转换器。
但是,使用此转换器作为属性似乎也会影响所有子类,但我只是希望它们使用标准转换器,这样我就不必为每个实现都实现 JsonConverter 。
这是我希望它看起来的类/逻辑:
[Route("test")]
[HttpPost]
public HttpResponseMessage Test([FromBody] JToken json)
{
var res = json.ToObject<Product>(); // I want an object of ProductImpl type here
return Request.CreateResponse(res);
}
[JsonConverter(typeof(JsonProductConverted))]
public abstract class Product
{
}
public class ProductImpl : Product
{
}
public class JsonProductConverted : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override …Run Code Online (Sandbox Code Playgroud)