2017-08-24 35 views
-1

我有一个Json结构见下面的代码。解析Json数据到自定义对象C#

"attributes": { 
    "13448": { 
     "id": 13448, 
     "name": { 
      "sv": "H\u00f6jd", 
      "en": "Length", 
      "nb": "Lengde", 
      "de": "", 
      "da": "L\u00e6ngde", 
      "fi": "Pituus" 
     }, 
     "value": { 
      "sv": "Sanderson", 
      "en": "Sanderson", 
      "nb": "Sanderson", 
      "de": null, 
      "da": "Sanderson", 
      "fi": "Sanderson" 
     } 
    }, 
    "13910": { 
     "id": 13910, 
     "name": { 
      "sv": "H\u00f6jd", 
      "en": "Length", 
      "nb": "Lengde", 
      "de": "", 
      "da": "L\u00e6ngde", 
      "fi": "Pituus" 
     }, 
     "value": { 
      "sv": "50s Collection", 
      "en": "50s Collection", 
      "nb": "50s Collection", 
      "de": null, 
      "da": "50s Collection", 
      "fi": "50s Collection" 
     } 
    } 
} 

我想序列化到一个定制的对象,我只是想从具有作为在字典中的一个关键。 并且存储作为该字典中的值。

 
Key  | Value | 
-------------------- 
H\u00f6jd|Sanderson| 
Length |Sanderson| 

所以我的代码我此刻:

foreach(var item in obj["attributes"]) 
{ 
    var attribute = item.First["name"].ToObject<ArticleAttributes>(); 
    var attribute = item.First["value"].ToObject<ArticleAttributes>(); 
} 

而且我ArticleAttributes类的样子:

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

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

回答

1

无需编写JSON转换器为您的特定情况下,最接近事情将是:

var res = JsonConvert.DeserializeObject<RootObject>(json); 

public class Item 
{ 
    public int Id { get; set; } 
    public Dictionary<string,string> Name { get; set; } 
    public Dictionary<string, string> Value { get; set; } 
} 


public class RootObject 
{ 
    public Dictionary<string, Item> Attributes { get; set; } 
} 

您可以进一步处理结果。

var finalres = res.Attributes 
        .ToDictionary(
         x => x.Value.Id, 
         x => x.Value.Value.Keys 
           .ToLookup(y => x.Value.Name[y], y => x.Value.Value[y])); 

现在你可以使用它作为:

var val = finalres[13448]["Lengde"].FirstOrDefault();