Как я могу преобразовать сериализованный поток в строку? - PullRequest
0 голосов
/ 03 февраля 2019

Мне нужно сериализовать и десериализовать список и записать его в файл JSON для последующего использования.

Я успешно десериализовал файл, но не смог записать после сериализации.Как я могу это сделать?

Вот код, который я написал.

StorageFile savedFile = await storageFolder.GetFileAsync("SavedData.json");
string text = await FileIO.ReadTextAsync(savedFile);
var serializer = new DataContractJsonSerializer(typeof(DataFormat));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(text));
List<DataFormat> data = (List<DataFormat>)serializer.ReadObject(ms);
        if (data == null)
        {
            data = new List<DataFormat>();
        }
        data.Add(new DataFormat
        {
            firstName = fnbox.Text,
            lastName = lnbox.Text,
            country = cbox.Text
        });

MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DataFormat));
ser.WriteObject(stream, data);

Класс DataFormat -

[DataContract]
public class DataFormat : IEquatable<DataFormat>
{
    [DataMember]
    public string firstName{ get; set; }
    [DataMember]
    public string lastName { get; set; }
    [DataMember]
    public string country { get; set; }
    public bool Equals(DataFormat other)
    {
        if (other == null)
        {
            return false;
        }

        return (firstName.Equals(other.firstName));
    }

}

Дополнительно Если есть какой-либо способ просто добавить строки в существующий файл без замены всего текста, пожалуйста, сообщите мне.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Проверьте, нужен ли вам следующий код.Я не уверен, что ты имеешь в виду, что не понимаешь, как писать в поток.

  private async void Button_Click(object sender, RoutedEventArgs e)
    {
        Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        Windows.Storage.StorageFile sampleFile =await storageFolder.GetFileAsync("sample.json");
        DataFormat data = new DataFormat();
        data.firstName = "Barry";
        data.lastName = "Wang";
        data.country = "China";
        Stream mystream = await sampleFile.OpenStreamForWriteAsync();          
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DataFormat));
        ser.WriteObject(mystream, data);
    }
0 голосов
/ 03 февраля 2019

Здесь то, что вам нужно, вы можете использовать LosFormatter класс - см. https://weblog.west -wind.com / posts / 2006 / Oct / 13 / LosFormatter-for-easy-Serialization

...