如何解决System.Text.Json对象数组反序列化
我正在尝试反序列化JSON,例如:
{ "Parameters": [ 1,"2",true,false,null ] }
使用System.Text.Json
序列化器。目标类如下:
public class Payload {
public object[] Parameters { get; set; }
}
参数始终是原始值,例如数字,字符串,布尔值等。
但是看起来System.Text.Json
填充了我的Parameters
数组
JsonElement
个值,而不是普通标量值。这是代码示例:
var payload = new Payload {
Parameters = new object[] {
1,null
}
};
var json = JsonSerializer.Serialize(payload);
// result: {"Parameters":[1,null]}
var deserialized = JsonSerializer.Deserialize<Payload>(json);
// result: deserialized.Parameters are all `JsonElement` values
使用Payload
类的代码不依赖于System.Text.Json
,
它与序列化器无关。有没有办法反序列化对象数组
使用System.Text.Json
并返回普通标量值而不是JsonElement
?
解决方法
指示如何完成。如果我们可以将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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。