【问题标题】:How can I convert Serialized stream to a string?如何将序列化流转换为字符串?
【发布时间】:2019-02-05 16:24:08
【问题描述】:

我需要对列表进行序列化和反序列化,并将其写入 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);

数据格式类 -

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

}

另外如果有任何方法可以将行添加到现有的 文件而不替换所有文本,请告诉我。

【问题讨论】:

  • 为什么不直接写入文件,如Using DataContractJsonSerializer to create a Non XML Json file接受的答案所示?
  • 你说的“添加行”是什么意思?添加新数据成员或添加 json 对象?您收到的错误信息是什么?
  • 我的意思是一个新的 JSON 对象。而且我没有收到任何错误,因为我不知道如何在 JSON 文件上写入。这就是我需要“如何在序列化后写入 JSON 文件”的答案。谢谢。 @BarryWang-MSFT

标签: c# json serialization uwp memorystream


【解决方案1】:

看看下面的代码是不是你需要的。我不太确定您是否是说您不了解如何写入流。

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

【讨论】:

  • 另一个简短的问题,我需要在从现有 JSON 文件中读取数据后将数据转换为列表。怎么能这样?
  • Jsonarray 和 Jsonobject 可以帮助您解析从 JSON 文件中获取的字符串。然后,您可以使用循环将它们读取到您的列表中。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2014-10-20
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多