2017-04-12 62 views
0

讓我從一個JSON對象開始喜歡獨特的分JSON對象

[ 
    { 
    "id": 32837732, 
    "composer": { 
     "id": 536, 
     "name": "Francis Poulenc" 
    }, 
    "title": "Of Thee I Sing: Overture (radio version)" 
    }, 
    { 
    "id": 32837735, 
    "composer": { 
     "id": 245, 
     "name": "George Gershwin" 
    }, 
    "title": "Concerto in F : I. Allegro" 
    }, 
    { 
    "id": 32837739, 
    "composer": { 
     "id": 245, 
     "name": "George Gershwin" 
    }, 
    "title": "Concerto in F : II. Adagio" 
    } 
] 

是有可能得到,用C#,LINQ中,在乾淨的,聲明的方式,一個JSON像

{ 
'composer': [ 
       { 
       'id': '536', 
       'name': 'Francis Poulenc' 
       }, 
       { 
       'id': '245', 
       'name': 'George Gershwin' 
       }, 
     ] 
} 

這是一個JSon對象,每個作曲者(id和name)都有唯一的子值嗎? 感謝所有。

回答

0

您可以使用Newtonsoft.Json.JsonConvert,並且需要創建相應的類才能反序列化和序列化對象。

這是類會是什麼樣子

public class YourObject 
{ 
    public int id { get; set; } 
    public Composer composer { get; set; } 
    public string title { get; set; } 

} 

public class Composer 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

public class JsonResult 
{ 
    public List<Composer> composer { get; set; } 
} 

在這裏你作曲家編號和名稱做1組,採取的第一個每個組的代碼,這將確保您有唯一的ID的和名稱

string jsonString = 
    "[\r\n {\r\n \"id\": 32837732,\r\n \"composer\": {\r\n  \"id\": 536,\r\n  \"name\": \"Francis Poulenc\"\r\n },\r\n \"title\": \"Of Thee I Sing: Overture (radio version)\"\r\n },\r\n {\r\n \"id\": 32837735,\r\n \"composer\": {\r\n  \"id\": 245,\r\n  \"name\": \"George Gershwin\"\r\n },\r\n \"title\": \"Concerto in F : I. Allegro\"\r\n },\r\n {\r\n \"id\": 32837739,\r\n \"composer\": {\r\n  \"id\": 245,\r\n  \"name\": \"George Gershwin\"\r\n },\r\n \"title\": \"Concerto in F : II. Adagio\"\r\n }\r\n]"; 
List<YourObject> yourList = JsonConvert.DeserializeObject<List<YourObject>>(jsonString); 
List<Composer> composers = yourList.Select(t => t.composer).GroupBy(t => new { t.name, t.id }).Select(t => t.First()).ToList(); 
JsonResult jsonResult = new JsonResult { composer = composers }; 
var jsonResultString = JsonConvert.SerializeObject(jsonResult); 

這裏與結果的全csharppad打印出來http://csharppad.com/gist/5a39f78b1878738fa0181495bb6e3f6e

+0

謝謝!我能夠將您的代碼適應我的「真實」情況,並且完美地工作! –