【发布时间】:2014-08-16 09:55:19
【问题描述】:
摘要
您好,我正在开展一个项目,需要通过 HttpClient 发送一些对象的潜在巨大 json,典型的大小为 10-20 mb 的 JSON。为了有效地做到这一点,我想使用流,两者都与 Json.Net 一起序列化对象以及流以使用 HttpClient 发布数据。
问题
这是使用 Json.net 进行序列化的 sn-p,为了使用流,Json.net 期望它会写入一个流:
public static void Serialize( object value, Stream writeOnlyStream )
{
StreamWriter writer = new StreamWriter(writeOnlyStream); <-- Here Json.net expects the stream to be already created
JsonTextWriter jsonWriter = new JsonTextWriter(writer);
JsonSerializer ser = new JsonSerializer();
ser.Serialize(jsonWriter, value );
jsonWriter.Flush();
}
虽然 HttpClient 期望它会读取一个流:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:54359/");
var response = await client.PostAsync("/api/snapshot", new StreamContent(readOnlyStream)); <-- The same thing here, HttpClient expects the stream already to exist
...
}
所以最终这意味着两个类都希望流由其他人创建,但是对于 Json.Net 和 HttpClient 都没有流。所以这个问题似乎可以通过实现一个流来解决,该流将拦截对只读流的读取请求,并根据来自只写流的请求发出写入。
问题
也许有人已经偶然发现了这种情况,并且可能已经找到了已经实施的解决方案。如果有,请分享给我,
提前谢谢你!
【问题讨论】: