Подтвердить что ты не робот

Удалить свойства из строки Json с помощью newtonsoft

У меня есть следующая строка JSON:

{  
   "results":[  
      {  
         "id":11,
         "name":"Employee A",
         "isEmployee":true
      },
      {
         "id":12,
         "name":"Employee B",
         "isEmployee":true
      },
      {
         "id":13,
         "name":"Employee C",
         "isEmployee":true
      },
      {
         "id":14,
         "name":"Contractor A",
         "isEmployee":false
      },
      {
         "id":15,
         "name":"Contractor B",
         "isEmployee":false
      }
   ],
   "totalItems":5
}

Мне нужно удалить из него свойства id и isEmployee и оставить только свойство name.

Вот желаемый результат:

{  
   "results":[  
      {  
         "name":"Employee A"
      },
      {  
         "name":"Employee B"
      },
      {  
         "name":"Employee C"
      },
      {  
         "name":"Contractor A"
      },
      {  
         "name":"Contractor B"
      }
   ],
   "totalItems":5
}

Как это можно сделать в С# с использованием Newtonsoft JSON.NET?

4b9b3361

Ответ 1

Существуют два основных подхода:

Либо

  • Разделите его на JObject (например, JObject.Parse(json)); изменить граф объектов, обновив вложенные объекты JObject при перемещении; сериализуйте исходный JObject, который теперь представляет измененный граф объектов.

или

  • Дезертициализация JSON для сильно типизированных объектов без дополнительных свойств. Свойства, которые не присутствуют в типах С#, будут отключены. Затем сериализовался только десериализованный объект.

Ответ 2

существует метод Remove (не уверен, был ли он во время этого вопроса)

Например:

var raw = "your json text";
var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw);
o.Property("totalItems").Remove()
return o.ToString();

или для вашего точного ввода

var parent = JsonConvert.DeserializeObject<JObject>(raw);
((JArray)parent.Property("results").Value)
    .Select(jo => (JObject)jo)
    .ToList()
    .ForEach(x => 
        x
            .Properties()
            .ToList()
            .ForEach(p =>
            {
                if (p.Name != "name")
                    p.Remove();
            }))
    //.Dump();
    ;