System.Text.Json 自定义序列化/反序列化
System.Text.Json Custom Seriallization / Deserialization
我有以下 class:
public class PropoertyValue {
string Id {get;set;}
object Value {get;set;}
string Type {get;set;}
}
当我 serialize/deserialize Json 我希望值 属性 反映“类型”属性 中指定的类型。我该怎么做?
此处示例:
Json: {"Id":"Property1","Value":0,"Type":"System.Int32"}
// Type 必须是任何 POCO 对象类型。
当反序列化时,我会调用 PropertyValue class 方法,return 值:
public getValue<T>() => (T)Value;
谁能帮我解决 serialization/deserialization 的 PropertyValue 类型?
当您的 JSON 反序列化为 class 时,对象 属性 转换为 JsonElement.with 此扩展方法,您可以将 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>();
我有以下 class:
public class PropoertyValue {
string Id {get;set;}
object Value {get;set;}
string Type {get;set;}
}
当我 serialize/deserialize Json 我希望值 属性 反映“类型”属性 中指定的类型。我该怎么做?
此处示例:
Json: {"Id":"Property1","Value":0,"Type":"System.Int32"}
// Type 必须是任何 POCO 对象类型。
当反序列化时,我会调用 PropertyValue class 方法,return 值:
public getValue<T>() => (T)Value;
谁能帮我解决 serialization/deserialization 的 PropertyValue 类型?
当您的 JSON 反序列化为 class 时,对象 属性 转换为 JsonElement.with 此扩展方法,您可以将 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>();