Tengo un objeto de tipo anónimo que recibo como dinámico de un método que me gustaría comprobar si existe una propiedad en ese objeto.
....
var settings = new {
Filename="temp.txt",
Size=10
}
...
function void Settings(dynamic settings) {
var exists = IsSettingExist(settings,"Filename")
}
¿Cómo implementaría IsSettingExist?

Respuestas:
Salida:
fuente
ViewBag? Si es así, consulte stackoverflow.com/a/24192518/70345Isprefijo es más confuso de lo que sería de otra maneraHasProperty. También diría que usar un prefijo gramaticalmente incorrecto como este en realidad no es idiomático en C♯.fuente
objType.GetProperty(name) != null;devuelve nulo en propiedades que existenobjType.GetProperty(name) != nullsiempre devolverá abool, que (por definición) nunca puede sernull.Type.GetProperty(string)una propiedad inexistente devuelve algo que no sea nulo.si puede controlar la creación / transmisión del objeto de configuración, le recomendaría usar un ExpandoObject en su lugar.
fuente
Esto funciona para tipos anónimos
ExpandoObject,Nancy.DynamicDictionaryo cualquier otra cosa a la que se pueda enviarIDictionary<string, object>.fuente
Esto es trabajo para mí-:
fuente
RuntimeBinderExceptionydynamicObj[property].Valuecuando el valor es realmente allí ...var value = dynamicObj[property]es suficiente ... y cuando no existeKeyNotFoundExceptionenDictionaryse lanza ... ver más adelante ...Ninguna de las soluciones anteriores funcionó para
dynamicesoJson, sin embargo, logré transformar una conTry catch(por @ user3359453) cambiando el tipo de excepción lanzada (enKeyNotFoundExceptionlugar deRuntimeBinderException) en algo que realmente funciona ...Espero que esto te ahorre algo de tiempo.
fuente
Fusionar y corregir respuestas de Serj-TM y user3359453 para que funcione con ExpandoObject y DynamicJsonObject. Esto funciona para mi.
fuente
Usando la reflexión, esta es la función que uso:
luego..
fuente
Whereprimero, y luegoAnyes redundante, ya que también puede formular su expresión de filtradoAny.En caso de que alguien necesite manejar un objeto dinámico proveniente de Json, modifiqué la respuesta de Seth Reno para manejar el objeto dinámico deserializado de NewtonSoft.Json.JObjcet.
fuente
Para extender la respuesta de @Kuroro, si necesita probar si la propiedad está vacía, a continuación debería funcionar.
fuente