首页 > 解决方案 > 将(几乎)json序列化为.NET对象

问题描述

所以我正在查询 S3 存储桶中的文件;https://aws.amazon.com/blogs/developer/amazon-s3-select-support-in-the-aws-sdk-for-net/

我正在尝试使用:

using (var eventStream = await GetSelectObjectContentEventStream())
{
    var recordResults = eventStream
        .Where(ev => ev is RecordsEvent)
        .Cast<RecordsEvent>()
        .Select(records =>
        {
            using (var reader = new StreamReader(records.Payload, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }).ToArray();
    var results = string.Join(Environment.NewLine, recordResults);
    Console.WriteLine(results);
}

然而; reader.ReadToEnd();实际上可以包含多条记录。但然后喜欢: {"VatNumber":"1234","Category":"ALF"},{"VatNumber":"1234","Category":"CDL"},

正如你看到的; 不是有效的列表;也不是有效的关闭。

现在我在做:

var list = new List<T>();

    using (var eventStream = (await _s3Client.SelectObjectContentAsync(request, cancellationToken)).Payload)
        foreach (var ev in eventStream.Where(ev => ev is RecordsEvent))
        {
            if (ev is RecordsEvent records)
            {
                using (var reader = new StreamReader(records.Payload, Encoding.UTF8))
                {
                    var content = (await reader.ReadToEndAsync()).TrimEnd(JsonRecordDelimiter.ToCharArray());
                    _logger.LogInformation($"Content received is: {content}");

                    if (content.Contains(JsonRecordDelimiter))
                        list.AddRange(JsonConvert.DeserializeObject<List<T>>($"[{content}]"));
                    else
                        list.Add(JsonConvert.DeserializeObject<T>(content));
                }
            }
        }
    _logger.LogInformation("results from this thingy: " + JsonConvert.SerializeObject(list));

    return list;

注意丑陋的事情,例如: reader.ReadToEndAsync()).TrimEnd(JsonRecordDelimiter.ToCharArray()

$"[{content}]")

单个元素也可以进来;也与,结局。我确实可以选择设置 NO 分隔符;但后来我无法绕过它。

什么是更好的选择?

我正在查询的文件如下所示:

1234;ALF
1234;CDL
12;A
34;
;
;
de;CD

标签: jsonamazon-web-servicesamazon-s3.net-corejson.net

解决方案


推荐阅读