c# - 在 C# 中根据 ID 删除属性中的 JSON 数据

标签 c# json json.net

我需要删除 JSON 文件中的数据。我已经尝试了很多方法,但它并没有删除数据。我也试过这个例子。

Remove JSON objects from a large file

但在上面的示例中,他们传递的是一个 jsonstring,但我有一个 jobject 类型的数据。

我的 JSON 文件如下。

{
  "id": 123,
  "name": "Pankaj Kumar",
  "address": {
    "street": "El Camino Real",
    "city": "San Jose",
    "zipcode": 95014
  },
  "experiences": [
    {
      "companyid": 1,
      "companyname": "abc1"
    },
    {
      "companyid": 20,
      "companyname": "Genpact Headstrong"
    },
    {
      "companyid": 71,
      "companyname": "new company"
    },
    {
      "companyid": 77,
      "companyname": "Mind Tree LTD"
    },
    {
      "companyid": 89,
      "companyname": "TCS"
    },
    {
      "companyid": 22,
      "companyname": "Hello World LTD"
    }
  ],
  "phoneNumber": 9988664422,
  "role": "Developer"
}

我想根据companyid删除公司。

我已尝试使用以下代码根据公司 ID 进行删除。

private void DeleteCompany() {
 var json = File.ReadAllText(jsonFile);
 try {
  var jObject = JObject.Parse(json);
  JArray experiencesArrary = (JArray) jObject["experiences"];
  Console.Write("Enter Company ID to Delete Company : ");
  var companyId = Convert.ToInt32(Console.ReadLine());

  if (companyId > 0) {
   var companyName = string.Empty;

   foreach(var company in experiencesArrary.Where(obj => obj["companyid"].Value < int > () == companyId)) {
    companyName = Convert.ToString(company["companyname"]);
   }

   var companyToDeleted = "{ 'id': " + companyId + ", 'companyname': '" + companyName + "'}";
   experiencesArrary.Remove(companyToDeleted);

   jObject["experiences"] = experiencesArrary;
   string output = Newtonsoft.Json.JsonConvert.SerializeObject(jObject, Newtonsoft.Json.Formatting.Indented);
   File.WriteAllText(jsonFile, output);
  } else {
   Console.Write("Invalid Company ID, Try Again!");
   UpdateCompany();
  }
 } catch (Exception) {

  throw;
 }
}

请建议或修改我删除数据的代码。

最佳答案

不需要像您现在那样创建 deleteObject,您已经非常接近解决方案了。您可以像这样简单地找到您的对象并删除。

var companyToDeleted = experiencesArrary.Where(obj => obj["companyid"].Value<int>() == companyId).ToList();

foreach (var item in companyToDeleted)
{
   experiencesArrary.Remove(item);
}

更新

var companyToDeleted = experiencesArrary.FirstOrDefault(obj => obj["companyid"].Value<int>() == companyId);

experiencesArrary.Remove(companyToDeleted);

关于c# - 在 C# 中根据 ID 删除属性中的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44173337/

相关文章:

.net - Json.net 向包含特定类型的每个类添加属性

c# - 在 .NET 中将 List<object> 序列化为 XML 时如何重命名根节点?

java - Hibernate + 惰性获取 + gson = LazyInitializationException

java - Jersey 在 POST 上使用 JSON

python - 使用新键将 Pandas DataFrame 转换为 Dict 格式

.net - 如何安装与.net 4.0兼容的json.net版本?

c# - 使用 SystemParametersInfo SPI_GETICONTITLELOGFONT

c# - 简单的正则表达式 [0-9]* 不适用于 C# 中的 {e|24}

c# - 这两种说法有什么区别?

c# - Newtonsoft JSON PreserveReferencesHandling 与自定义 Equals 用法