Puede usar el reflejo para inspeccionar el objeto y hacer una copia que cambie el valor de cada propiedad según sea necesario. Casualmente, acabo de hacer pública una nueva biblioteca que hace que este tipo de cosas sea realmente fácil. Se puede conseguir aquí: https://github.com/jamietre/IQObjectMapper
He aquí un ejemplo del código que utilizaría
var newInstance = ObjectMapper.Map(obj,(value,del) => {
return value !=null && value.GetType().IsClass ?
null :
value;
});
el "mapa" en iteración del método a través de cada propiedad del objeto, y pide una Func<object,IDelegateInfo>
para cada uno (IDelegateInfo con la reflexión información como el nombre de la propiedad, tipo, etc.). La función devuelve el nuevo valor para cada propiedad. Entonces en este ejemplo, simplemente pruebo el valor de cada propiedad para ver si es una clase, y si es así, devuelvo nulo; si no, devuelve el valor original.
Otra forma más expresiva de hacerlo:
var obj = new MyObject();
// map the object to a new dictionary
var dict = ObjectMapper.ToDictionary(obj);
// iterate through each item in the dictionary, a key/value pair
// representing each property
foreach (KeyValuePair<string,object> kvp in dict) {
if (kvp.Value!=null && kvp.Value.GetType().IsClass) {
dict[kvp.Key]=null;
}
}
// map back to an instance
var newObject = ObjectMapper.ToNew<MyObject>(dict);
En cualquier caso, el valor de newInstance.myChildren
(y cualquier otra propiedad que se escriben sin valor) será nulo. Podría cambiar fácilmente las reglas de lo que sucede en este mapeo.
Espero que esto ayude. Por cierto, a partir de tu comentario, parece que JSON no es realmente tu objetivo, sino solo algo que pensaste que te ayudaría a lograrlo. Si quieres terminar con json, solo serializa el resultado de esto, p.
string json = JavaScriptSerializer.Serialize(newObject);
Pero yo no involucraría a json si eso fuera solo un medio para un fin; si desea permanecer en objetos CLR, entonces no es necesario usar JSON como intermediario.
Se puede mostrar algún ejemplo de un problema JSON? – igofed
¿Puedes simplemente crear un nuevo objeto sin hijos y serializar eso? –
Lógicamente eso tendría sentido, pero quiero quitar cualquier objeto de tipo Objeto de sus hijos. Pensé que la serialización json sería la mejor manera de hacerlo, pero definitivamente estoy abierto a sugerencias. –