2012-06-12 36 views
6

我有一個類,如下所示:如何在JSON.Net中獲取JsonProperty的名稱?

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

從CSV文件生成的JSON最初,代表Foo對象的每一行 - 它基本上平坦的,所以我需要某些鍵映射到imageflags。

我試着寫一個基於範例here的CustomCreationConverter。

這看起來似乎很好地映射了標誌,但它無法設置普通屬性 - 它尋找'bar'而不是'name_in_json'。

我該如何着手獲取foo類型對象的'name_in_json'值?

編輯

目前的解決方案:

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

回答

3

好了,在上面的例子中,你從類型獲得所有屬性名稱與:

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

所以你只能使用實際的屬性名稱,你應該做的是爲每個屬性獲取類型的自定義屬性JsonProperty使用GetCustomAttributes方法,並從中獲取json屬性名稱。