将JSON反序列化为类型为

时间:2019-01-14 20:59:06

标签: c# json json.net

我有一个JSON对象列表,其简化结构如下所示:

{
    "id": 7,
    "type": "int32",
    "default": 110
}

“ type”属性可能有所不同(int16,int32,float等),“ default”属性应正确反映类型。这是我的通用C#类:

public class ConfigurationParameter<T>
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("type")]
    public string Type { get; set; }

    [JsonProperty("default")]
    public T Default { get; set; }
}

我的目标是读入这些JSON对象的列表,这些列表将基于“ type”属性将它们反序列化为ConfigurationParameter的类型化版本。我首先创建了一个自定义JSON转换器:

public class ConfigurationParameterConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject obj = JObject.Load(reader);

        if (obj["type"] != null)
        {
            if(obj["type"].ToString() == "int32")
            {
                return obj.ToObject<ConfigurationParameter<int>>();
            }
            else if (obj["type"].ToString() == "float")
            {
                return obj.ToObject<ConfigurationParameter<float>>();
            }
        }

        return null;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

但是当我实际上反序列化JSON字符串时,我不确定要返回哪种类型,因为我不知道输出的强类型对象将是什么?

//doesn't compile
var typedConfigurationParameter = JsonConvert.DeserializeObject<ConfigurationParameter<T>>(json, settings);

我不确定这是我不能做的事情,因为无法在运行时弄清楚吗?或者,如果我可能无法正确地找到解决方案?

0 个答案:

没有答案