• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

258
Vistas
Cómo eliminar la propiedad de JObject dinámico mediante programación

A continuación se muestra el código

json: solo quiero JsonLookupData en la respuesta

 { "LookupType": "ABC", "BusSegmentName": "Test", "PolcyObjectId": "999", "JsonLookupData": { "data": { "OBJ_ID": "9393", "ABC": "JAJA", "XYZ": "LL", "AAA": "250.00" } } } public new dynamic input { get; set; } //initialization input = JsonConvert.DeserializeObject(jsonInput.ToString()); //trying to remove all attributes except JsonLookupData input.Properties().Where (x => !x.Name.Equals("JsonLookupData")).ToList().ForEach(x => x.Remove());

¿Hay alguna forma de eliminar las propiedades directamente desde la entrada dinámica (no quiero asignarlo primero a JObject)?

el código anterior está dando el siguiente error

 Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si bien un JObject sigue siendo la opción correcta, aún puede usar dynamic siempre que no use expresiones lambda que dependan del despacho dinámico.

Al asignar la salida de input.Properties() a un tipo no dinámico ( IEnumerable<dynamic> ), podemos realizar operaciones en una expresión lambda.

 input = JsonConvert.DeserializeObject(jsonInput.ToString()); IEnumerable<dynamic> props = input.Properties(); props.Where(x => !x.Name.Equals("JsonLookupData")).ToList().ForEach(x => x.Remove()); string xx = JsonConvert.SerializeObject(input);

Esto da como resultado:

 {"JsonLookupData":{"data":{"OBJ_ID":"9393","ABC":"JAJA","XYZ":"LL","AAA":"250.00"}}}

Alternativamente, puede evitar Linq por completo.

 input = JsonConvert.DeserializeObject(jsonInput); // create a separate tracking collection so that we // do not modify the collection we are iterating var propsToRemove = new List<JProperty>(); foreach (var prop in input.Properties()) { if (!prop.Name.Equals("JsonLookupData")) { propsToRemove.Add(prop); } } propsToRemove.ForEach(x => x.Remove()); string xx = JsonConvert.SerializeObject(input);

Esto da como resultado:

 {"JsonLookupData":{"data":{"OBJ_ID":"9393","ABC":"JAJA","XYZ":"LL","AAA":"250.00"}}}

para su muestra JSON.

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda