首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Text.Json对象数组反序列化

System.Text.Json对象数组反序列化
EN

Stack Overflow用户
提问于 2020-08-16 02:07:21
回答 1查看 1.3K关注 0票数 3

我正在尝试反序列化JSON,如下所示:

代码语言:javascript
复制
{ "Parameters": [ 1, "2", true, false, null ] }

使用System.Text.Json序列化程序。目标类如下所示:

代码语言:javascript
复制
public class Payload {
    public object[] Parameters { get; set; }
}

参数总是原始值,比如数字、字符串、布尔值等。但是看起来System.Text.JsonJsonElement值而不是普通的标量值填充我的Parameters数组。以下是代码示例:

代码语言:javascript
复制
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,它是与序列化程序无关的。有没有一种方法可以使用System.Text.Json反序列化对象数组并返回普通标量值而不是JsonElement

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-16 03:32:38

这是一个如何做的指示。如果我们可以接受数字的int64,那么我们将正确地反序列化测试数据,但仍然只是一个POC。

代码语言:javascript
复制
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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63429334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档