2017-07-22 6 views
1

Also ich möchte eine Klasse, die eine IReadOnlyList<InkStroke> von Windows.UI.Input.Inking enthält, serialisieren, wie ich an einer UWP-App arbeite.Stream-Ausgabe zu String

Ich bin ein DataContractSerializer mit meiner Klasse serialise, aber ich brauche die IReadOnlyList erste serialise, eine zu string oder byte[], so dass es mit dem DataContractSerializer serialisiert werden kann.

Das am besten geeignete Verfahren zur Herstellung des Strich von einem StrokeContainer Speichern ist die StrokeContainer.SaveAsync() Methode, die in einem IOutputStream nimmt. Wie kann ich einen IOutputStream erstellen und dann den Ausgang als string oder byte[] erfassen?

Unten ist die Methode, die ich, um diese Funktionalität zu implementieren versuchen:

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

Antwort

1

glaube ich Ihnen einen Base64-String für den Strom binär zurückkehren können.

Die erste ist es speichern

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

Der letzte Änderung Strom base64 zu streamen ist

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

Also diesen Code implementiert haben Sie vorgeschlagen, entdeckte ich, dass, unabhängig davon, was auf der Leinwand ist , der Puffer ist immer ein 'byte []' voller 0s und daher ist die Zeichenkette immer "AAAAA ...", und daher werden die Daten nicht erfolgreich in eine Zeichenkette geschrieben. Irgendwelche Ideen? –

+0

Es scheint, dass die Zeile 'available stream.AsStream(). ReadAsync (buffer, 0, buffer.Length);' schreibt nichts in den 'byte [] buffer' –

+0

Ich glaube, ich vergesse die' stream' Suche nach 0 – lindexi