yal*_*lie 7 c# json deserialization 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, "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不依赖于System.Text.Json,它与序列化程序无关。有没有办法使用 s 来反序列化对象数组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);