System.Text.Json 对象数组反序列化
System.Text.Json object array deserialization
我正在尝试反序列化 JSON,如下所示:
{ "Parameters": [ 1, "2", true, false, null ] }
使用 System.Text.Json
序列化程序。目标 class 看起来像这样:
public class Payload {
public object[] Parameters { get; set; }
}
参数总是原始值,如数字、字符串、布尔值等。
但是看起来 System.Text.Json
填充了我的 Parameters
数组
JsonElement
值而不是普通标量值。这是代码示例:
var payload = new Payload {
Parameters = new object[] {
1, "2", true, false, null
}
};
var json = JsonSerializer.Serialize(payload);
// result: {"Parameters":[1,"2",true,false,null]}
var deserialized = JsonSerializer.Deserialize<Payload>(json);
// result: deserialized.Parameters are all `JsonElement` values
消耗 Payload
class 的代码不依赖于 System.Text.Json
,
它与序列化程序无关。有没有办法反序列化对象数组
使用 System.Text.Json
并取回纯标量值而不是 JsonElement
s?
指示如何完成。如果我们可以将 int64 用于数字,将正确反序列化测试数据,但仍然只是一个 POC。
public class ObjectConverter : JsonConverter<object>
{
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return reader.TokenType switch
{
JsonTokenType.Number => reader.GetInt64(),
JsonTokenType.String => reader.GetString(),
JsonTokenType.True => reader.GetBoolean(),
JsonTokenType.False => reader.GetBoolean(),
_ => null
};
}
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
}
public class Payload {
public object[] Parameters { get; set; }
}
var payload = new Payload
{
Parameters = new object[] { 1, "2", true, false, null }
};
var json = JsonSerializer.Serialize(payload);
var serializeOptions = new JsonSerializerOptions();
serializeOptions.Converters.Add(new ObjectConverter());
var deserialized = JsonSerializer.Deserialize<Payload>(json, serializeOptions);
我正在尝试反序列化 JSON,如下所示:
{ "Parameters": [ 1, "2", true, false, null ] }
使用 System.Text.Json
序列化程序。目标 class 看起来像这样:
public class Payload {
public object[] Parameters { get; set; }
}
参数总是原始值,如数字、字符串、布尔值等。
但是看起来 System.Text.Json
填充了我的 Parameters
数组
JsonElement
值而不是普通标量值。这是代码示例:
var payload = new Payload {
Parameters = new object[] {
1, "2", true, false, null
}
};
var json = JsonSerializer.Serialize(payload);
// result: {"Parameters":[1,"2",true,false,null]}
var deserialized = JsonSerializer.Deserialize<Payload>(json);
// result: deserialized.Parameters are all `JsonElement` values
消耗 Payload
class 的代码不依赖于 System.Text.Json
,
它与序列化程序无关。有没有办法反序列化对象数组
使用 System.Text.Json
并取回纯标量值而不是 JsonElement
s?
指示如何完成。如果我们可以将 int64 用于数字,将正确反序列化测试数据,但仍然只是一个 POC。
public class ObjectConverter : JsonConverter<object>
{
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return reader.TokenType switch
{
JsonTokenType.Number => reader.GetInt64(),
JsonTokenType.String => reader.GetString(),
JsonTokenType.True => reader.GetBoolean(),
JsonTokenType.False => reader.GetBoolean(),
_ => null
};
}
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
}
public class Payload {
public object[] Parameters { get; set; }
}
var payload = new Payload
{
Parameters = new object[] { 1, "2", true, false, null }
};
var json = JsonSerializer.Serialize(payload);
var serializeOptions = new JsonSerializerOptions();
serializeOptions.Converters.Add(new ObjectConverter());
var deserialized = JsonSerializer.Deserialize<Payload>(json, serializeOptions);