2012-06-12 12 views
6

que tienen una clase de esta manera:¿Cómo obtengo el nombre de JsonProperty en JSON.Net?

[JsonObject(MemberSerialization.OptIn)] 
public class foo 
{ 
    [JsonProperty("name_in_json")] 
    public string Bar { get; set; } 
    // etc. 
    public Dictionary<string, bool> ImageFlags { get; set; } 
} 

Se genera el JSON desde un archivo CSV en un principio, cada línea que representa un objeto foo - es básicamente plana, por lo que tendrá que asignar ciertas claves para imageflags.

Intenté escribir un CustomCreationConverter basado en el ejemplo here.

Esto parece asignar las banderas bien, pero falla al establecer las propiedades normales: busca 'bar' en lugar de 'name_in_json'.

¿Cómo podría obtener el valor 'name_in_json' para un objeto de tipo foo?

edición:

solución actual:

var custAttrs = objectType.GetProperties().Select(p =>  p.GetCustomAttributes(typeof(JsonPropertyAttribute), true)).ToArray(); 
var propNames = objectType.GetProperties().Select(p => p.Name.ToLower()).ToArray(); 
Dictionary<string, string> objProps = new Dictionary<string, string>(); 
for (int i = 0; i < propNames.Length; i++) 
    // not every property has json equivalent... 
    if (0 == custAttrs[i].Length) 
    { 
     continue; 
    } 

    var attr = custAttrs[i][0] as JsonPropertyAttribute; 
    objProps.Add(attr.PropertyName.ToLower(), propNames[i].ToLower()); 
} 

Respuesta

3

bien, en el ejemplo anterior se obtiene todos los nombres de las propiedades de un tipo con:

var objProps = objectType.GetProperties().Select(p => p.Name.ToLower()).ToArray(); 

Por lo que sólo utilizan nombre de propiedad real, lo que debería hacer en su lugar es para cada propiedad obtener un atributo personalizado de tipo JsonProperty usando el método GetCustomAttributes, y obtén el nombre de la propiedad json.

Cuestiones relacionadas