Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新JSON数组/ArrayLIst C中的字典键值#_C#_.net_Json_Arraylist - Fatal编程技术网

C# 更新JSON数组/ArrayLIst C中的字典键值#

C# 更新JSON数组/ArrayLIst C中的字典键值#,c#,.net,json,arraylist,C#,.net,Json,Arraylist,需要使用如下所示的相同数据更新ArrayListarlData,但需要删除albumName值,除前1外,即albumName[0]'s值,Json数据应按如下输出所示进行更新 static void Main(string[] args) { /*Declaration */ ArrayList arlData = null; arlData = new ArrayList(); Dictionary<string, object> data = n

需要使用如下所示的相同数据更新
ArrayList
arlData
,但需要删除
albumName
值,除前1外,即
albumName[0]
's值,Json数据应按如下输出所示进行更新

static void Main(string[] args)
{
    /*Declaration */
    ArrayList arlData = null;
    arlData = new ArrayList();
    Dictionary<string, object> data = null;

    //Json data format
    string json = @"{""Id"":""1"",""Count"":""2"",""musicName"":""test1"",""albumName"":[""1"", ""2"",""3""]}"
          ,json2 = @"{""Id"":""2"",""Count"":""1"",""musicName"":""test2"",""albumName"":[""4"", ""5""]}"
          ,json3 = @"{""Id"":""3"",""Count"":""1"",""musicName"":""test3"",""albumName"":[""6"", ""7""]}";

    /*Adding data to array list   */
    arlData.Add(JsonConvert.DeserializeObject<Dictionary<string, object>>(json));
    arlData.Add(JsonConvert.DeserializeObject<Dictionary<string, object>>(json2));
    arlData.Add(JsonConvert.DeserializeObject<Dictionary<string, object>>(json3));
    int intbytlen = 0;

    if (arlData.Count > 0)        
    {
        intbytlen = arlData.Count;                
        for (int iterator = 0; iterator < intbytlen; iterator++)
        {
            //Data fetch
            data = (Dictionary<string, object>)arlData[iterator];

            //Data serialization
            Console.WriteLine(JsonConvert.SerializeObject(data, Formatting.Indented));
        }
    }
}

考虑使用类似的模型

public class AlbumList
{      
    public int ID { get; set; }
    public int Count { get; set; }
    public string MusicName { get; set; }
    public List<Album> AlbumName { get; set; }
}

public class Album
{
    public int AlbumName { get; set; }
} 
公共类相册列表
{      
公共int ID{get;set;}
公共整数计数{get;set;}
公共字符串MusicName{get;set;}
公共列表名称{get;set;}
}
公开课相册
{
公共名称{get;set;}
} 
然后实例化并用数据填充对象,并添加到
列表中。然后,您可以在需要时使用Newtonsoft进行序列化和反序列化

var albums = JsonConvert.DeserializeObject<List<AlbumList>>(json);

var json = JsonConvert.SerializeObject(albums, Formatting.Indented);
var albums=JsonConvert.DeserializeObject(json); var json=JsonConvert.serialized对象(相册、格式、缩进);
反序列化后,访问
列表
,并删除所有非索引0的项

for (int i = 1; i < AlbumList.Count; i++)
            {
                AlbumList.RemoveAt(i);
            }
for(int i=1;i
考虑使用类似的模型

public class AlbumList
{      
    public int ID { get; set; }
    public int Count { get; set; }
    public string MusicName { get; set; }
    public List<Album> AlbumName { get; set; }
}

public class Album
{
    public int AlbumName { get; set; }
} 
公共类相册列表
{      
公共int ID{get;set;}
公共整数计数{get;set;}
公共字符串MusicName{get;set;}
公共列表名称{get;set;}
}
公开课相册
{
公共名称{get;set;}
} 
然后实例化并用数据填充对象,并添加到
列表中。然后,您可以在需要时使用Newtonsoft进行序列化和反序列化

var albums = JsonConvert.DeserializeObject<List<AlbumList>>(json);

var json = JsonConvert.SerializeObject(albums, Formatting.Indented);
var albums=JsonConvert.DeserializeObject(json); var json=JsonConvert.serialized对象(相册、格式、缩进);
反序列化后,访问
列表
,并删除所有非索引0的项

for (int i = 1; i < AlbumList.Count; i++)
            {
                AlbumList.RemoveAt(i);
            }
for(int i=1;i
我找到了最简单的方法,不用创建类和属性来更新字典键值和JSON数据,只需使用
键入dynamic
从数组列表中获取数据

if (data.ContainsKey("albumName") && data["albumName"] != null)
 {
   //Assign specific data to type dynamic by deserialising the data
   dynamic arryAlbumName = JsonConvert.DeserializeObject(data["albumName"].ToString());
   if (arryAlbumName != null && arryAlbumName.Count > 0)
   {
    for (int count = 0; count < arryAlbumName.Count; count++)
    {
      if (count == 0)
      {
        ArrayList albumName = new ArrayList();
        //Check for data exists and update the array value to arlData[]
        if (!string.IsNullOrEmpty(arryAlbumName[count].ToString()))
        {
            albumName.Add(arryAlbumName[count]);
            data.Remove("albumName");
            data.Add("albumName", albumName);
            arlData[iterator] = data;
         }
        }
      } 
    }
  } 

我找到了最简单的方法,不用创建类和属性来更新字典键值和JSON数据,只需使用
type dynamic
从数组列表中获取数据

if (data.ContainsKey("albumName") && data["albumName"] != null)
 {
   //Assign specific data to type dynamic by deserialising the data
   dynamic arryAlbumName = JsonConvert.DeserializeObject(data["albumName"].ToString());
   if (arryAlbumName != null && arryAlbumName.Count > 0)
   {
    for (int count = 0; count < arryAlbumName.Count; count++)
    {
      if (count == 0)
      {
        ArrayList albumName = new ArrayList();
        //Check for data exists and update the array value to arlData[]
        if (!string.IsNullOrEmpty(arryAlbumName[count].ToString()))
        {
            albumName.Add(arryAlbumName[count]);
            data.Remove("albumName");
            data.Add("albumName", albumName);
            arlData[iterator] = data;
         }
        }
      } 
    }
  } 

我会考虑使用一个库来构建你的JSON。在我看来,Newtonsoft是最好的软件之一。我还将创建一个表示json字符串的对象,并根据需要序列化/反序列化,然后您可以轻松地对对象进行更改。您能否简要介绍一下创建对象并更新反序列化值&我正在使用
Newtonsoft.json
librarySure,您将创建您的模型(类)albumName属性将返回一个列表。然后,当您需要进行更改时,您可以对对象进行反序列化,访问列表并删除除索引0之外的所有项目。然后再序列化。我会考虑使用一个库来构建JSON。在我看来,Newtonsoft是最好的软件之一。我还将创建一个表示json字符串的对象,并根据需要序列化/反序列化,然后您可以轻松地对对象进行更改。您能否简要介绍一下创建对象并更新反序列化值&我正在使用
Newtonsoft.json
librarySure,您将创建您的模型(类)albumName属性将返回一个列表。然后,当您需要进行更改时,您可以对对象进行反序列化,访问列表并删除除索引0之外的所有项目。然后再次序列化。