c# - JArray.Contains 问题

标签 c# json.net

我有一个 JArray,从文件中读取:

private void RemoveCatalog(Catalog catalog) {

    System.IO.StreamReader filereader = new System.IO.StreamReader(@appDirectory + "\\list");

    JArray myjarray = JArray.Parse(filereader.ReadToEnd());
    filereader.Close(); 

    string json = " {\"token\":\"" + catalog.Token + "\",\"name\":\"" + catalog.Name +"\",\"logo\":\"" + catalog.Logo + "\",\"theme\":\"" + catalog.Theme + "\"}";

    JObject myCatalogAsJObject = JObject.Parse(json);

    myjarray.Remove(myCatalogAsJObject);

}

我想删除对应于 myCatalogAsJObject 变量的 JObject,但是它不起作用,因为 myjarray.Contains(myCatalogAsJObject) 的答案是 false。

问题是 myjarray 实际上包含它:它是我的 JArray 中唯一的 JObject。

如果我执行 myCatalogAsJObject.ToString().Equals(myjarray.First.ToString()),答案是正确的。

我卡住了。

最佳答案

.Contains(和.Remove)默认会比较引用。由于您正在创建一个 JObject,因此该数组不包含该实例

可以从数组中获取对象的实例并删除那个:

JObject match = myjarray.FirstOrDefault(j => j.token == catalog.token &&
                                             j.name  == catalog.name  &&
                                             j.logo  == catalog.logo  &&
                                             j.theme == catalog.theme);

myjarray.Remove(match);

编辑:这是您的代码,经过简化:

JToken match = myjarray.FirstOrDefault(j => j.ToString().Equals(myCatalogAsJObject.ToString()));

myjarray.Remove(match);

关于c# - JArray.Contains 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343771/

相关文章:

c# - 遍历通用对象属性

json - 如何使用嵌套字典反序列化 json?

c# - 使用 Newtonsoft.Json 反序列化时出现 System.ArgumentOutOfRangeException

c# - 对不同语言/体系结构/操作系统中相对较小的数字取对数

c# - 如何将字符串拆分为字典<string,string>

c# - 为什么我的 Draw() 和 Update() 方法没有被调用?

c# - 将 ISO 8601 日期时间字符串反序列化为 C# DateTime

c# - JObject ToString 与 StringEnumConverter 不工作

c# - MVC 5 - 在登录时设置 session 变量

c# - MySql HasRows 总是返回 true