我有一个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);
我不确定这是我不能做的事情,因为无法在运行时弄清楚吗?或者,如果我可能无法正确地找到解决方案?