Добавление новых данных в существующий файл JSON - PullRequest
2 голосов
/ 18 декабря 2011

Я искал все возможное, чтобы найти решение этой проблемы, и провел последние несколько недель, пытаясь реализовать собственное решение, но я просто не могу ничего придумать.

Я был бы очень признателен за любую помощь!

У меня есть файл, который выглядит следующим образом (file.json):

{
  "Expense": {
    "Name": "OneTel Mobile Bill",
    "Amount": "39.90",
    "Due": "28/12/2011",
    "Recurrence": "1 Months",
    "Paid": "0",
    "LastPaid": "01/01/2002"
  }
}

И в моем приложении, когда я создаю новый«Расход», я хочу добавить этот новый Расход к существующему файлу JSON, чтобы он выглядел так:

{
  "Expense": {
    "Name": "OneTel Mobile Bill",
    "Amount": "39.90",
    "Due": "28/12/2011",
    "Recurrence": "1 Months",
    "Paid": "0",
    "LastPaid": "01/01/2002"
  },
  "Expense": {
    "Name": "Loan Repayment",
    "Amount": "50.00",
    "Due": "08/03/2012",
    "Recurrence": "3 Months",
    "Paid": "0",
    "LastPaid": "08/12/2011"
  }
}

И вот как я создаю JSON и записываю в файл:

async public void WriteToFile(string type, string data)
{
    file = await folder.GetFileAsync(file.FileName);
    IRandomAccessStream writestream = await file.OpenAsync(FileAccessMode.ReadWrite);


    IOutputStream outputstream = writestream.GetOutputStreamAt(0);
    DataWriter datawriter = new DataWriter(outputstream);
    datawriter.WriteString(data);

    await datawriter.StoreAsync();
    outputstream.FlushAsync().Start();
}

private void CreateExpenseButton_Click(object sender, RoutedEventArgs e)
{
    //Create the Json file and save it with WriteToFile();
    JObject jobject =
        new JObject(
            new JProperty("Expense",
                new JObject(
                    new JProperty("Name", NameTextBox.Text),
                    new JProperty("Amount", AmountTextBox.Text),
                    new JProperty("Due", DueTextBox.Text),
                    new JProperty("Recurrence", EveryTextBox.Text + " " + EveryComboBox.SelectionBoxItem),
                    new JProperty("Paid", "0"),
                    new JProperty("LastPaid", "Never")
                           )
                         )
                   );
    try
    {
        WriteToFile(Expenses, jobject.ToString());

        // Close the flyout now.
        this.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    }
    catch (Exception exception)
    {
        Debug.Write(exception.Message);

    }
}

Я использую библиотеку Json.NET от Джеймса Ньютона Кинга, и это довольно здорово, но даже после прочтения прилагаемой документации я абсолютно не представляю, как читать файл JSON и добавлять к нему данные.

Есть ли примеры вокруг, которые демонстрируют, как это делается, или вы можете порекомендовать другую библиотеку для C #, которая позволила бы мне сделать это?

Редактировать

Вот как ячтение одного счета от JSв файле:

        JObject json = JObject.Parse(data);
        Expense expense = new Expense
        {
            Amount = (string)json["Expense"]["Amount"],
            Due = (string)json["Expense"]["Due"],
            Name = (string)json["Expense"]["Name"]
        };

        Debug.Write(expense.Amount);

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011

Поскольку вы можете читать непосредственно в объект Expense, вы должны иметь возможность добавить такой объект в List<Expense> - добавить новые данные в виде объекта Expense в список (непосредственно из данных формы, или иначе).

На этом этапе вы должны иметь возможность выписать List<Expense> с помощью JSON.NET - он должен позаботиться о создании списка.

Я предлагаю вам всегда сохранять List<Expense>, даже если он содержит только один элемент, поскольку это упростит сериализацию и десериализацию.

0 голосов
/ 18 декабря 2011

Вы можете попытаться десериализовать данные в объект Expence и добавить свои данные, а затем сериализовать объект (список объектов) в файл.

...