2017-07-27 5 views
0

So ein IReadOnlyList<InkStroke> von Windows.UI.Input.Inking für meine UWP App zu serialisiert und deserialisiert, ich versuche, und ich habe den folgenden Code verwendet, um die Daten zu serialisieren:Konvertieren von String zum Streamen von

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

Wie kann ich deserialisieren diese Zeichenfolge Erstellen Sie stattdessen eine (oder IRandomAccessStream), die in der StrokeContainer.LoadAsync() Methode verwendet werden kann?

Antwort

1

Sie den folgenden Frieden von Code verwenden können ....

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

Sie wollen nicht 'Encoding.UTF8.GetBytes' hier - Sie' konvertieren .FromBase64String', basierend auf der Art und Weise, wie die Zeichenfolge erstellt wurde. –

1

Versuchen 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

Die 'AsBuffer'-Methode ist anscheinend in UWP-Apps nicht verfügbar, da sie den' System.Runtime.InteropServices.WindowsRuntime'-Namespace verwendet. –

+1

Sie können den 'System.Runtime.WindowsRuntime' -Verweis als [NuGet-Paket] hinzufügen (https://www.nuget.org/packages/System.Runtime.WindowsRuntime/). Ich habe es gerade jetzt versucht – ashchuk

+0

Oh natürlich, danke! –