2013-07-26 102 views
0

有一個JSON字符串如下我如何在JSON對象標識符分配給屬性

{"668":{"name":"Pink Ice","base_rgb":[128,26,26], 
    "cloth":{"brightness":50,"contrast":1.36719,"hue":8,"saturation":0.351563,"lightness":1.36719,"rgb":[216,172,164]}, 
    "leather":{"brightness":47,"contrast":1.71875,"hue":8,"saturation":0.234375,"lightness":1.71875,"rgb":[207,170,163]}, 
    "metal":{"brightness":47,"contrast":1.64063,"hue":8,"saturation":0.429688,"lightness":1.48438,"rgb":[211,145,134]}} 

我將其分爲1級與1個嵌套類可以給他們打電話。

[Serializable] 
    public class ColorEntry 
    { 
     public int Id { get; set; } 

     [JsonProperty("name")] 
     public string Name { get; set; } 

     [JsonProperty("base_rgb")] 
     [JsonConverter(typeof(JsonColorConverter))] 
     public Color BaseRGB { get; set; } 

     [JsonProperty("cloth")] 
     public ColorItemEntry Cloth { get; set; } 

     [JsonProperty("leather")] 
     public ColorItemEntry Leather { get; set; } 

     [JsonProperty("metal")] 
     public ColorItemEntry Metal { get; set; } 

     public class ColorItemEntry 
     { 
      public ColorItemType Type { get; set; } 

      [JsonProperty("brightness")] 
      public int Brightness { get; set; } 

      [JsonProperty("contrast")] 
      public double Contract { get; set; } 

      [JsonProperty("hue")] 
      public int Hue { get; set; } 

      [JsonProperty("saturation")] 
      public double Saturation { get; set; } 

      [JsonProperty("lightness")] 
      public double Lightness { get; set; } 

      [JsonProperty("rgb")] 
      [JsonConverter(typeof(JsonColorConverter))] 
      public Color RGB { get; set; } 

     } 
    } 
    public enum ColorItemType 
    { 
     Cloth, 
     Leather, 
     Metal, 
    } 

我可分配668 ColorEntry.ID和 ColorItemType.Cloth到ColorItemType.Type或 ColorItemType.Leather到ColorItemType.Type或 ColorItemType.Metal到ColorItemType.Type

,而不必創建自定義轉換器。

回答

2

試試這個:

dynamic obj = JsonConvert.DeserializeObject(json);  
    foreach (dynamic item in obj as System.Collections.IEnumerable) 
    { 
    var c = (ColorEntry)obj[item.Name].ToObject(typeof(ColorEntry)); 
    c.Id = int.Parse(item.Name); 
    } 
+0

使用我的自定義色彩轉換器後,它的工作對這個問題的一部分。但是,將ColorItemEntry.Type的子類轉換爲ColorItemType的枚舉類型仍然是個問題。 – galford13x

相關問題