簡體   English   中英

System.Text.Json object 數組反序列化

[英]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.JsonJsonElement值而不是普通的標量值填充我的Parameters數組。 這是代碼示例:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM