string jsonText = "[{\"a\": \"aaa\",\"b\": \"bbb\",\"c\": \"ccc\"},{\"a\": \"aa\",\"b\": \"bb\",\"c\": \"cc\"}]";
var mJObj = JArray.Parse(jsonText);
//需求,删除列表里的a节点的值为\"aa\"的项
IList<JToken> _ILIST = new List<JToken>(); //存储需要删除的项
JArray _JARRAY = new JArray(); foreach (var ss in mJObj) //查找某个字段与值
{
if ((((JObject)ss)["a"]).ToString() == "aa")
{
_ILIST.Add(ss);
_JARRAY.Add(ss); Console.Write(_ILIST[]);
Console.Write(_ILIST[].GetHashCode());
Console.Write("\r\n---------------------------\r\n");
Console.Write("\r\n---------------------------\r\n");
Console.Write(_JARRAY[]);
Console.Write(_JARRAY[].GetHashCode());
Console.Write("\r\n---------------------------\r\n");
Console.Write("\r\n---------------------------\r\n");
Console.Write(mJObj[].GetHashCode()); }
} foreach (var item in _ILIST) //移除mJObj 有效
{
mJObj.Remove(item);
}
foreach (var item in _JARRAY) //移除mJObj 无效
{
mJObj.Remove(item);
}

通过_ILIST删除是有效的。

通过_JARRAY删除是无效的。

感谢怪蜀黍(Q:390647417)的解惑~

因为mJObj是一个JArray,实现了 IList<JToken>, 所以这里的ss就是JToken类型,把它add到_ILIST这样一个List<JToken>里,非常适合。
但是你如果调用 _JARRAY.Add(ss), 把JToken加到JArray里,就会把这个JToken从原来它所属的JObject上“拆”下来,所以ss的Root在Add之后变了。
 

所以,本质上,这个是一个json的数据格式的设计问题。我觉得这样很合理。

 
 

总结:不同对象的Add方法并不保证原来是啥样,加进去还是啥样。

加进去的对象。在类型,值,ToString(),GetHash值,Root等方面,可能或多或少存在不同的地方。

所以以后遇到这种“诡异”的情况的时候,第一时间要想到是Add出了问题

最新文章

  1. [css]当父元素的margin-top碰上子元素的margin-top
  2. javascript DOM 操作
  3. 电视直播用的.m3u8 PC端和移动端地址 【流媒体播放测试专用】
  4. mysql 5.7压缩包安装笔记
  5. HTML中的英文缩写标记、属性
  6. js判断某个方法是否存在
  7. 分散式-ubuntu12.04安装hadoop1.2.1
  8. Kafka基本命令
  9. Android sqlitedatabase 事务
  10. SET构造函数
  11. 莫烦tensorflow(3)-Variable
  12. LeetCode - Beautiful Array
  13. Codeforces687C(SummerTrainingDay03-D DP)
  14. QCheckBox控件
  15. CentOS常用命令、快照、克隆大揭秘
  16. No.101_第二次团队会议
  17. FPGA quartus开发中常见的错误处理
  18. 微信小程序的零食商城
  19. duplicate files during packaging of apk
  20. bzoj4032-最短不公共子串

热门文章

  1. &lt;转 &gt;socket穿透代理代码(C++版)
  2. 正则化--L1正则化(稀疏性正则化)
  3. 在CMD中查看端口被什么程序占用
  4. Spring简化配置
  5. Atitit.&#160;atiJavaExConverter4js&#160;&#160;新的特性
  6. 常用Sql 标量值函数
  7. 基于Away3D实现全景的相机控制器。
  8. NYOJ 诡异的电梯 &amp;&amp; nyoj 1204 魔法少女
  9. centos7+nginx部署asp.net core mvc网站
  10. 游戏引擎 Unity 的入门易精通难体现在哪?为什么?