我正在使用dotnet Core 3.x开发WPF Web客户端,并且正在使用System.Text.Json API。我正在尝试使用Stream
在对象之间传递数据,以最大程度减少峰值内存使用量,因为正在发送一些大消息。
到目前为止,我编写的wrapper方法如下所示:
public async Task<TResponse> PutItem<TItem, TResponse>(string path, TItem item)
{
HttpResponseMessage response;
await using (Stream stream = new MemoryStream())
{
await JsonSerializer.SerializeAsync(stream, item);
var requestContent = new StreamContent(stream);
requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response = await _client.PutAsync(path, requestContent);
}
if (!response.IsSuccessStatusCode || response.Content == null)
{
return default;
}
string content = await response.Content.ReadAsStringAsync();
TResponse decodedResponse = JsonSerializer.Deserialize<TResponse>(content);
return decodedResponse;
}
但是,当将其放入服务器时,似乎没有写入任何内容。
我已经看到早期API的用户使用PushStreamContent
类,但是在dotnet Core中似乎并不存在。
非常感谢任何想法,谢谢!
答案 0 :(得分:2)
我想您当前的代码不起作用的原因是,您没有在序列化后将流位置重置为0。但是,由于创建了$brokerTables = ['test1' => 'broker_report', 'test2' => 'choice_report', 'test3' => 'odit_report', 'test4' => 'other_insurer_report'];
foreach ($brokerTables as $folder => $table) {
require_once($folder . '/classes/' . $brokerTables[$folder]);
$pdfdoc = new PdfCreator($this->conn);
// use $pdfdoc..
};
,因此您仍在序列化内存中的JSON。
MemoryStream
,可以使用 PushStreamContent
。
尝试类似的东西:
Microsoft.AspNet.WebApi.Client