を使用していますが、おそらくシリアル化および逆シリアル化のためのJSONファイルをJson.NETを使用していることに気づきました。私は、Jsonオブジェクトのリストを非直列化する方が良いと思います。このリストを操作し、新しいリストをJsonにシリアル化してファイルに保存し、1つのアイテムを直接シリアル化してファイルに書き込むことはできません。あなたのよう
public class JsonColor
{
public string color { get; set; }
public string value { get; set; }
}
:
if (file != null)
{
using (var streamIn = await file.OpenAsync(FileAccessMode.ReadWrite))
{
DataReader reader = new DataReader(streamIn);
await reader.LoadAsync((uint)streamIn.Size);
var jsonInstring = reader.ReadString((uint)streamIn.Size);
var JobjList = JsonConvert.DeserializeObject<List<JsonColor>>(jsonInstring);
reader.Dispose();
JobjList.Add(new JsonColor() { color = "pink", value = "#c0c" });
JsonOutstring = JsonConvert.SerializeObject(JobjList);
}
using (var streamOut = await file.OpenAsync(FileAccessMode.ReadWrite))
{
DataWriter writer = new DataWriter(streamOut);
writer.WriteString(JsonOutstring);
await writer.StoreAsync();
writer.DetachStream();
writer.Dispose();
}
}
else
{
}
私のクラスオブジェクト:このファイルに1つの項目を追加するための
[
{"color":"red","value":"#f00"},
{"color":"green","value":"#0f0"},
{"color":"blue","value":"#00f"},
{"color":"cyan","value":"#0ff"},
{"color":"magenta","value":"#f0f"},
{"color":"yellow","value":"#ff0"},
{"color":"black","value":"#000"}
]
コード:たとえば
は、私のJSONファイルは、このようなものです私がJsonファイルをデシリアライズしてList<JsonColor>
を取得したら、new JsonColor() { color = "pink", value = "#c0c" }
に1つの項目を追加しました最後にこの新しいリストをシリアライズして保存します。あなたのシナリオでは、あなたのニーズに合わせてJsonファイルと私のJsonColor
クラスを変更することができます。
更新:
private string JsonOutstring;
private async void Button_Click(object sender, RoutedEventArgs e)
{
//create a json file, if the file is exit, then open it.
var local = Windows.Storage.ApplicationData.Current.LocalFolder;
var Jsonfile = await local.CreateFileAsync("test.json", Windows.Storage.CreationCollisionOption.OpenIfExists);
if (Jsonfile != null)
{
ReadAndWriteJsonFile(Jsonfile);
}
else
{
}
}
public async void ReadAndWriteJsonFile(StorageFile file)
{
using (var streamIn = await file.OpenAsync(FileAccessMode.ReadWrite))
{
DataReader reader = new DataReader(streamIn);
await reader.LoadAsync((uint)streamIn.Size);
var jsonInstring = reader.ReadString((uint)streamIn.Size);
var JobjList = JsonConvert.DeserializeObject<List<JsonColor>>(jsonInstring);
reader.Dispose();
if (JobjList == null)
{
JobjList = new List<JsonColor>();
}
JobjList.Add(new JsonColor() { color = "pink", value = "#c0c" });
JsonOutstring = JsonConvert.SerializeObject(JobjList);
}
using (var streamOut = await file.OpenAsync(FileAccessMode.ReadWrite))
{
DataWriter writer = new DataWriter(streamOut);
writer.WriteString(JsonOutstring);
await writer.StoreAsync();
writer.DetachStream();
writer.Dispose();
}
}
public class JsonColor
{
public string color { get; set; }
public string value { get; set; }
}
は、より多くのコードはありますか?あなたはただストリームを捨てているだけです。 –
もちろん、投稿を編集しました。 – Aellopos
[既存のStorageFileにバイト配列を追加する方法](http://stackoverflow.com/questions/14092488/how-to-append-array-of-bytes-to-the-existed-storagefile)の可能な複製 –