json - 将(几乎)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
解决方案
推荐阅读
- karate - Using If condition to select data
- c++ - Main 的 Makefile 未定义参考(在 StackOverflow 上尝试过其他帖子)
- c# - Microsoft Azure Functions Nuget 包阻止 NET 库打包到 Nuget
- css - 如何在 React 组件 div 中显示背景图像?
- c# - 访问者模式在 API 中有什么好处?
- c - 如何使用指针来使用嵌入式 C 操作内存中特定寄存器的位
- java - Removing every 5th char in a string and return new String
- nginx - Nginx:获取 OAuth2 令牌
- jquery - 获取动态添加的表单字段的值返回错误的值
- sql - vb6/vba ado 在一系列日期上左连接