将输出流式传输到字符串

Stream output to String

所以我想序列化一个 class,其中包含来自 Windows.UI.Input.InkingIReadOnlyList<InkStroke>,因为我正在开发 UWP 应用程序。

我正在使用 DataContractSerializer 序列化我的 class,但是我需要先将 IReadOnlyList 序列化为 stringbyte[],以便它可以用 DataContractSerializer.

序列化

StrokeContainer 中保存笔划的最合适方法是 StrokeContainer.SaveAsync() 方法,它接受 IOutputStream.

如何创建 IOutputStream 然后将输出捕获为 stringbyte[]

下面是我尝试实现此功能的方法:

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);