2012-06-12 10 views
6

Mam klasy tak:Jak uzyskać nazwę JsonProperty w 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; } 
} 

JSON jest generowany z pliku CSV, pierwotnie każdej linii reprezentującej obiekt foo - to w zasadzie płaska, więc muszę map pewne klucze do imageflags.

Próbowałem napisać CustomCreationConverter na podstawie przykładu here.

Wygląda na to, że flagi są dobrze odwzorowane, ale nie można ustawić normalnych właściwości - szuka "paska" zamiast "nazwa_w_json".

Jak mogę uzyskać wartość "name_in_json" dla obiektu typu foo?

edit:

obecne rozwiązanie:

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()); 
} 

Odpowiedz

3

Dobra, w powyższym przykładzie można uzyskać wszystkie nazwy właściwości od rodzaju z:

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

więc używać tylko Właściwą nazwę właściwości, co zamiast tego zrobić, to dla każdej właściwości uzyskać niestandardowy atrybut typu JsonProperty przy użyciu metody GetCustomAttributes i pobierz z niej nazwę właściwości json.