2017-07-27 131 views
0

所以我試圖序列化和反序列化從Windows.UI.Input.InkingIReadOnlyList<InkStroke>我UWP應用程序,我用下面的代碼序列化數據:轉換字符串到流

var stream = new InMemoryRandomAccessStream(); 
await canvas.InkPresenter.StrokeContainer.SaveAsync(stream); 
await stream.FlushAsync(); 

var buffer = new byte[stream.Size]; 
await stream.AsStream().ReadAsync(buffer, 0, buffer.Length); 
return Convert.ToBase64String(buffer); 

我如何反序列化該字符串創建一個IInputStream(或代替IRandomAccessStream)可以在StrokeContainer.LoadAsync()方法中使用?

回答

1

您可以使用下面的代碼和平....

byte[] bytes = Convert.FromBase64String(stringinput); 
MemoryStream stream = new MemoryStream(bytes); 
IInputStream is=stream.AsRandomAccessStream(); //It will return an IInputStream object 
+3

你不想'Encoding.UTF8.GetBytes'在這裏 - 你想轉換' .FromBase64String',給定字符串的創建方式。 –

1

嘗試this

byte[] data = Convert.FromBase64String(encodedString); 
InMemoryRandomAccessStream inputStream = new InMemoryRandomAccessStream(); 
await inputStream.WriteAsync(data.AsBuffer()); 
inputStream.Seek(0); 
await canvas.InkPresenter.StrokeContainer.LoadAsync(inputStream); 
+0

由於使用'System.Runtime.InteropServices.WindowsRuntime'命名空間,'AsBuffer'方法看起來在UWP應用程序中不可用。 –

+1

您可以將'System.Runtime.WindowsRuntime'引用添加爲[NuGet package](https://www.nuget.org/packages/System.Runtime.WindowsRuntime/)。我剛纔試過了 – ashchuk

+0

當然哦,謝謝! –