【发布时间】:2018-07-20 12:55:48
【问题描述】:
我有一个类 MyData,它可以使用 Json.Net JsonSerializer.Serialize(TextWriter, object) 进行 Json 序列化。我想通过HttpClient.PostAsync将此数据(作为json)发送到网络服务。
因为将 json 转换为字符串,然后将其作为 StringContent 发送(可能)性能不佳,所以我想用流来做。
我找到了StreamContent 类,它在其构造函数中接受了一个流。并且将 json 序列化为流也应该是可能的。所以我尝试了这个:
MyData data = ...; // already filled
string uri = ...; // already filled
HttpClient client = new HttpClient();
JsonSerializer serializer = new JsonSerializer();
using (MemoryStream ms = new MemoryStream())
{
using (StreamWriter sw = new StreamWriter(ms))
using (JsonWriter jw = new JsonTextWriter(sw))
{
serializer.Serialize(sw, data);
ms.Flush();
ms.Position = 0;
}
HttpResponseMessage response = client.PostAsync(uri, new StreamContent(ms)).Result;
}
但运行此代码在HttpResponseMessage response = ... 行中给了我两个例外:
- HttpRequestException:将内容复制到流中时出错。
- ObjectDisposedException:无法访问已关闭的流。
我做错了什么?
【问题讨论】:
标签: c# serialization stream json.net httpclient