c# - name - newtonsoft json attributes
Eliminar propiedades de una cadena Json usando newtonsoft (2)
Tengo la siguiente cadena 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
}
Necesito eliminar de él las propiedades id e isEmployee y dejar solo la propiedad name.
Aquí está el resultado deseado:
{
"results":[
{
"name":"Employee A"
},
{
"name":"Employee B"
},
{
"name":"Employee C"
},
{
"name":"Contractor A"
},
{
"name":"Contractor B"
}
],
"totalItems":5
}
¿Cómo se puede hacer esto en C # usando Newtonsoft JSON.NET?
Hay dos enfoques básicos,
Ya sea
- Analícelo en un objeto JO (por ejemplo,
JObject.Parse(json)
); modifique el gráfico de objetos actualizando los objetos JO anidados durante el desplazamiento; serialice el objeto JO original que ahora representa el gráfico de objeto modificado.
O
- Deserialice el JSON a objetos fuertemente tipados sin las propiedades adicionales. Las propiedades que no están presentes en los tipos C # se eliminarán silenciosamente. Luego serializa el objeto justamente deserializado.
hay un método de eliminación presente (no estoy seguro si estaba en el momento de esta pregunta)
Por ejemplo:
var raw = "your json text";
var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw);
o.Property("totalItems").Remove()
return o.ToString();
o para su entrada exacta
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();
;