问题描述
我有以下课程:
public class PropoertyValue {
string Id {get;set;}
object Value {get;set;}
string Type {get;set;}
}
当我序列化/反序列化Json时,我希望value属性反映“ Type”属性中指定的类型。我该怎么办?
此处示例:
Json:{"Id":"Property1","Value":0,"Type":"system.int32"}
//类型必须是任何POCO对象类型。
反序列化时,我将调用一个PropertyValue类方法来返回值:
public getValue<T>() => (T)Value;
有人可以帮助我进行PropertyValue类型的序列化/反序列化吗?
解决方法
当JSON反序列化为类时,对象属性将转换为JsonElement。使用此扩展方法,您可以将JsonElement转换为所需的每种类型。
public static T ToObject<T>(this JsonElement element)
{
if (element.ValueKind != JsonValueKind.Null)
return JsonSerializer.Deserialize<T>(element.GetRawText());
return default(T);
}
您可以像下面的代码一样使用它:
var model = new PropoertyValue();
model.Value = 0;
var jsonString = JsonSerializer.Serialize(model);
var data = JsonSerializer.Deserialize<PropoertyValue>(jsonString);
var yourObject = ((JsonElement)data.Value).ToObject<int>();
现在 yourObject 变量类型为Int32。
您有另一种方法;您可以使用第二种模型进行反序列化。
public class DeserializeModel {
string Id {get;set;}
JsonElement Value {get;set;}
string Type {get;set;}
}
随后:
var model = new PropoertyValue();
model.Value = 0;
var jsonString = JsonSerializer.Serialize(model);
var data = JsonSerializer.Deserialize<DeserializeModel>(jsonString);
var yourObject = data.Value.ToObject<int>();