C# 将新的json对象添加到C中现有的json对象#

C# 将新的json对象添加到C中现有的json对象#,c#,json,serialization,windows-runtime,C#,Json,Serialization,Windows Runtime,我想在现有的json文件中添加一个包含歌曲的新播放列表。 我正在使用Newtonsoft Json.NET创建一个Json文件,如下所示: dynamic GroupObj = new JObject(); GroupObj.Playlist = new JArray() as dynamic; dynamic PlayListObj = new JObject(); PlayListObj.UniqueId = ""; PlayListObj.Title = "Playlist name";

我想在现有的json文件中添加一个包含歌曲的新播放列表。 我正在使用Newtonsoft Json.NET创建一个Json文件,如下所示:

dynamic GroupObj = new JObject();
GroupObj.Playlist = new JArray() as dynamic;
dynamic PlayListObj = new JObject(); 
PlayListObj.UniqueId = "";
PlayListObj.Title = "Playlist name";
GroupObj.Playlist.Add(PlayListObj);

PlayListObj.Songs = new JArray() as dynamic;
dynamic SongObj = new JObject();
SongObj.UniqueId = "";
SongObj.Title = "song name";
PlayListObj.Songs.Add(SongObj);
data = GroupObj.ToString();
{
  "Playlist": [
    {
      "UniqueId": "",
      "Title": "Playlist name",
      "Songs": [
        {
          "UniqueId": "",
          "Title": "song name",
        }
      ]
    },
    {
      "UniqueId": "",
      "Title": "Playlist name",
      "Songs": [
        {
          "UniqueId": "",
          "Title": "song name",
          "Lyrics": "song lyrics",
          "Location": "location"
        }
      ]
    }
  ]
}
其结果如下:

{
  "Playlist": [
    {
      "UniqueId": "",
      "Title": "Playlist name",
      "Songs": [
        {
          "UniqueId": "",
          "Title": "song name",
        }        
      ]
    }
  ]
}
我将如何修改Json.NET以向现有对象添加新对象,从而获得如下结果:

dynamic GroupObj = new JObject();
GroupObj.Playlist = new JArray() as dynamic;
dynamic PlayListObj = new JObject(); 
PlayListObj.UniqueId = "";
PlayListObj.Title = "Playlist name";
GroupObj.Playlist.Add(PlayListObj);

PlayListObj.Songs = new JArray() as dynamic;
dynamic SongObj = new JObject();
SongObj.UniqueId = "";
SongObj.Title = "song name";
PlayListObj.Songs.Add(SongObj);
data = GroupObj.ToString();
{
  "Playlist": [
    {
      "UniqueId": "",
      "Title": "Playlist name",
      "Songs": [
        {
          "UniqueId": "",
          "Title": "song name",
        }
      ]
    },
    {
      "UniqueId": "",
      "Title": "Playlist name",
      "Songs": [
        {
          "UniqueId": "",
          "Title": "song name",
          "Lyrics": "song lyrics",
          "Location": "location"
        }
      ]
    }
  ]
}

没关系,我通过重写整个文件找到了解决办法。可能不是很节约资源,但对于一个学校项目来说,它是有效的。谢谢

string data;
JsonValue val = JsonValue.Parse("{\"some json data\": some value,}");
JsonArray Pl = val.GetObject().GetNamedArray("Playlist");
for (uint x = 0; x != Pl.Count; x++)//go through each playlist
{
    var Pl_title = Pl.GetObjectAt(x).GetNamedString("Title"); //get playlist name
    if (Pl_title != txtPlaylistName.Text)//dont do anything if playlist exists
    {
        var Pl_id = Pl.GetObjectAt(x).GetNamedString("UniqueId");
        var Pl_loc = Pl.GetObjectAt(x).GetNamedString("Location");
        var Pl_img = Pl.GetObjectAt(x).GetNamedString("ImagePath");

                    //re-create the playlist
        dynamic PlayListObj = new JObject();
        PlayListObj.UniqueId = Pl_id;
        PlayListObj.Title = Pl_title;
        PlayListObj.Location = Pl_loc;
        PlayListObj.ImagePath = Pl_img;
        GroupObj.Playlist.Add(PlayListObj);

        PlayListObj.Songs = new JArray() as dynamic;

        JsonArray Sng = Pl.GetObjectAt(x).GetNamedArray("Songs");
        for (uint y = 0; y != Sng.Count; y++)
        {
            var Sng_id = Sng.GetObjectAt(y).GetNamedString("UniqueId");
            var Sng_title = Sng.GetObjectAt(y).GetNamedString("Title");
            var Sng_lyr = Sng.GetObjectAt(y).GetNamedString("Lyrics");
            var Sng_loc = Sng.GetObjectAt(y).GetNamedString("Location");
            //re-create the songs in the playlist
            dynamic SongObj = new JObject();
            SongObj.UniqueId = Sng_id;
            SongObj.Title = Sng_title;
            SongObj.Lyrics = Sng_lyr;
            SongObj.Location = Sng_loc;
            PlayListObj.Songs.Add(SongObj);
        }
                }
                else
                    txtBerror.Text = "The name: " + txtPlaylistName.Text + " already exists.";
            }
            if (txtPlaylistName.Text != string.Empty)
            {
                //re-create the playlist
                dynamic newPlayListObj = new JObject();
                newPlayListObj.UniqueId = "PL " + txtPlaylistName.Text;
                newPlayListObj.Title = txtPlaylistName.Text;
                newPlayListObj.Location = "";
                newPlayListObj.ImagePath = "";
                GroupObj.Playlist.Add(newPlayListObj);

                newPlayListObj.Songs = new JArray() as dynamic;

                for (int a = 0; a != 3; a++)//number of songs
                {
                    dynamic SongObj = new JObject();
                    SongObj.UniqueId = "Sng " + "file name";
                    SongObj.Title = "file name";
                    SongObj.Lyrics = "";
                    SongObj.Location = "";
                    newPlayListObj.Songs.Add(SongObj);
                }
                            }
            else
                txtBerror.Text = "Enter a playlist name";

data = GroupObj.ToString();
await Windows.Storage.FileIO.WriteTextAsync(newFile, data);//write to the file

您只有一个播放对象,请尝试创建另一个?这就是问题所在。如何…?如果你要制作一个标准模板,为什么不为播放列表和歌曲开设课程?通过这种方式,您可以轻松地使用Json.Convert()进行序列化