将输出流式传输到字符串
Stream output to String
所以我想序列化一个 class,其中包含来自 Windows.UI.Input.Inking
的 IReadOnlyList<InkStroke>
,因为我正在开发 UWP 应用程序。
我正在使用 DataContractSerializer
序列化我的 class,但是我需要先将 IReadOnlyList 序列化为 string
或 byte[]
,以便它可以用 DataContractSerializer
.
序列化
从 StrokeContainer
中保存笔划的最合适方法是 StrokeContainer.SaveAsync()
方法,它接受 IOutputStream
.
如何创建 IOutputStream
然后将输出捕获为 string
或 byte[]
?
下面是我尝试实现此功能的方法:
private async Task<string> SerializeStrokes(InkCanvas canvas)
{
IReadOnlyList<InkStroke> currentStrokes = canvas.InkPresenter
.StrokeContainer
.GetStrokes();
if (currentStrokes.Count > 0)
{
string serializedString = string.Empty;
using (IOutputStream outputStream = somethinghere)
{
await canvas.InkPresenter.StrokeContainer.SaveAsync(outputStream);
await outputStream.FlushAsync();
}
// use some kind of stream reader to return contents of output ?
}
else
{
return string.Empty;
}
}
我想你可以 return 流的 base64 字符串是二进制的。
首先是将其保存到流中
var stream = new InMemoryRandomAccessStream();
await canvas.InkPresenter.StrokeContainer.SaveAsync(stream);
await stream.FlushAsync();
最后是把stream改成base64
var buffer = new byte[stream.Size];
await stream.AsStream().ReadAsync(buffer, 0, buffer.Length);
return Convert.ToBase64String(buffer);
所以我想序列化一个 class,其中包含来自 Windows.UI.Input.Inking
的 IReadOnlyList<InkStroke>
,因为我正在开发 UWP 应用程序。
我正在使用 DataContractSerializer
序列化我的 class,但是我需要先将 IReadOnlyList 序列化为 string
或 byte[]
,以便它可以用 DataContractSerializer
.
从 StrokeContainer
中保存笔划的最合适方法是 StrokeContainer.SaveAsync()
方法,它接受 IOutputStream
.
如何创建 IOutputStream
然后将输出捕获为 string
或 byte[]
?
下面是我尝试实现此功能的方法:
private async Task<string> SerializeStrokes(InkCanvas canvas)
{
IReadOnlyList<InkStroke> currentStrokes = canvas.InkPresenter
.StrokeContainer
.GetStrokes();
if (currentStrokes.Count > 0)
{
string serializedString = string.Empty;
using (IOutputStream outputStream = somethinghere)
{
await canvas.InkPresenter.StrokeContainer.SaveAsync(outputStream);
await outputStream.FlushAsync();
}
// use some kind of stream reader to return contents of output ?
}
else
{
return string.Empty;
}
}
我想你可以 return 流的 base64 字符串是二进制的。
首先是将其保存到流中
var stream = new InMemoryRandomAccessStream();
await canvas.InkPresenter.StrokeContainer.SaveAsync(stream);
await stream.FlushAsync();
最后是把stream改成base64
var buffer = new byte[stream.Size];
await stream.AsStream().ReadAsync(buffer, 0, buffer.Length);
return Convert.ToBase64String(buffer);