【问题标题】:Deserialize a list of serialized json strings反序列化序列化的 json 字符串列表
【发布时间】:2023-03-23 22:00:02
【问题描述】:

result 对象是一个字符串列表。此列表中的每个字符串都是一个序列化的 JSON 对象。

这是序列化的“结果”:

["{\"Id\":\"91e02276\",\"Message\":\"Hi There\"}","{\"Id\":\"91e02277\",\"Message\":\"Hi again\"}"]

反序列化可以正常工作:

var x = JsonConvert.DeserializeObject<DTO>(result[0]);

如何反序列化完整的结果列表?这不起作用:

var y = JsonConvert.DeserializeObject<IEnumerable<DTO>>(Newtonsoft.Json.JsonConvert.SerializeObject(result.ToArray()));

【问题讨论】:

  • 请提供数据。
  • ["{\"Id\":\"91e02276\",\"消息\":\"你好\"}","{\"Id\":\"91e02277\ ",\"消息\":\"再次嗨\"}"]
  • @PeterPitLock 是 result 吗?您应该编辑问题并将其放在那里。

标签: c# arrays json list json.net


【解决方案1】:

如果result 中的每一项都是序列化的DTO,只需遍历result 并一次反序列化每一项。

var dtoList = new List<DTO>();
foreach (var json in result)
{
   dtoList.Add(JsonConvert.DeserializeObject<DTO>(json));
}

【讨论】:

  • 或者,通过 LINQ,var dtoList = result.Select(json =&gt; JsonConvert.DeserializeObject&lt;DTO&gt;(json)).ToList();
【解决方案2】:

您可以使用 Linq 反序列化结果中的每个字符串。例如,假设您的 Dto 定义如下。

public class Dto
{
    public string Id{get;set;}
    public string Message{get;set;}
}

你可以反序列化为,

var result = new []{"{\"Id\":\"91e02276\",\"Message\":\"Hi There\"}","{\"Id\":\"91e02277\",\"Message\":\"Hi again\"}"};
var dtos = result.Select(x=> JsonConvert.DeserializeObject<Dto>(x));

结果

【讨论】:

    猜你喜欢
    • 2019-08-22
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多