C# System.Text.Json自定义序列化/反序列化

C# System.Text.Json自定义序列化/反序列化,c#,json,system.text.json,.net-standard-2.1,C#,Json,System.text.json,.net Standard 2.1,我有以下课程: 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对象类型指定 反序列化时,我

我有以下课程:

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;
public getValue()=>(T)值;

有人能帮我序列化/反序列化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<DeserializeModel>(jsonString);
var yourObject = data.Value.ToObject<int>();
var模型=新的PropoertyValue();
模型值=0;
var jsonString=JsonSerializer.Serialize(model);
var data=JsonSerializer.Deserialize(jsonString);
var yourObject=data.Value.ToObject();

当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<DeserializeModel>(jsonString);
var yourObject = data.Value.ToObject<int>();
var模型=新的PropoertyValue();
模型值=0;
var jsonString=JsonSerializer.Serialize(model);
var data=JsonSerializer.Deserialize(jsonString);
var yourObject=data.Value.ToObject();
您可以参考本文并编写自己的转换器来处理
类型
属性。这篇文章的答案也可能会有所帮助。您可以参考这篇文章并编写自己的转换器来处理
类型
属性。这方面的答案也可能有帮助