相关疑难解决方法(0)

将JSON反序列化为抽象类

我试图将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的原因是我有很多具体的类.

有什么建议?

  • 我正在使用Newtonsoft.Json

c# serialization json json.net

35
推荐指数
4
解决办法
3万
查看次数

如何调用 JsonConvert.DeserializeObject 并通过 [JsonConverter] 禁用应用于基本类型的 JsonConverter?

编辑:澄清问题:

我已经重写了基类型的 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)

.net c# json json.net

2
推荐指数
1
解决办法
3619
查看次数

标签 统计

c# ×2

json ×2

json.net ×2

.net ×1

serialization ×1