JSON文件在打开新连接时覆盖旧数据c#

时间:2017-11-18 17:45:06

标签: c# json wpf

我有一个c#WPF解决方案。解决方案需要将对象添加到JSON文件。哪个有效。我遇到的问题是当打开与文件的新连接时,旧数据被覆盖。我错过了什么?为什么它会覆盖旧数据。我很确定这很简单。但我无法看到它。

if (clickCount == 1)
{
    //changes create button text
    createBtn.Content = "Create";
    //creates new message obj
    Message message = new Message();

     //depending on the form type creates a json object
     if (valid.MessageType == "E")
     {
         //checks e-mail
         valid.CheckEmail(senderTxtBox.Text);
         //creates varibles for adding to JSON file
         message.MessageId = messageTypeComboBox.Text + messageTypeTxtBox.Text;
         message.SenderTxt = senderTxtBox.Text;
         message.Subject = subjectTxtBox.Text;
         message.MessageTxt = messageTxtBox.Text;
      }

      messageList.Add(message);

      String json = JsonConvert.SerializeObject(messageList, Formatting.Indented);
      System.IO.File.WriteAllText(@"JsonMessage.Json", json);

      clickCount = 0;

      messageTxtBox.Clear();
      senderTxtBox.Clear();
      subjectTxtBox.Clear();
      messageTxtBox.Clear();
      messageTypeTxtBox.Clear();
      messageTypeComboBox.SelectedIndex = -1;
}

2 个答案:

答案 0 :(得分:1)

您正在使用WriteAllText,每次要将新的Json对象传输到json文件时,都会重写该文件。

File.AppendText似乎是一个更好的解决方案,因为无论何时将新消息添加到MessageList,您都不需要实际重写所有文件,但是当您打开与文件的新连接时也会解决现有问题没有删除所有先前插入的json数据。

PS。如果您使用AppendText,则必须将所有集合中的文件传递给该文件,但只传递您刚刚收到的消息,否则您的文件将始终使用重复数据写入,并且随着大小的增加情况会变得更糟你的消息列表对象。

答案 1 :(得分:0)

我看到您已使用WriteAllText方法将json写入文件。

您应该使用using (StreamWriter sw = System.IO.File.AppendText(@"JsonMessage.Json")) { sw.WriteLine(json); } 方法。

像这样的东西

if (networkInfo == null) {

        builder1.create();
        builder1.show();
    }

这是有关File.AppendText

的更多信息的链接

https://msdn.microsoft.com/en-us/library/system.io.file.appendtext(v=vs.110).aspx