2017-04-26 14 views
0

どのようにuはC#で以下のJSONを作るのですかC#のJSON同じ値でこれに

[ 
{"file": "fileName1", "key":0, title:"u1"}, 
{"file": "fileName1", "key":2, title:"u1"}, 
{"file": "fileName2", "key":5, title:"u1"}, 
{"file": "fileName2", "key":10, title:"u1"} 
] 

を並べ替えます。

{ 
"fileName1" : [{"key":0, title:"u1"},{"key":2, title:"u1"}], 
"fileName2" : [{"key":0, title:"u1"},{"key":2, title:"u1"}] 
} 

はあなたが

+5

まあの.NETフィドルを行っているありがとう、後者ルックスそれが効果的に '辞書<文字列だように、リスト> '基本的に私は1つの型に非直列化し、別の型に変換してから、それを直列化します。あなたはそれを試しましたか?もしそうなら、あなたはどこにいらっしゃいましたか? –

答えて

1

私はあなたの要件 https://dotnetfiddle.net/Wsnl9V

using System; 
using System.Collections.Generic; 
using System.Linq; 
using Newtonsoft.Json; 


public class Program 
{ 
    public static void Main() 
    { 
     string input = @"[ 
      {'file': 'fileName1', 'key':0, title:'u1'}, 
      {'file': 'fileName1', 'key':2, title:'u1'}, 
      {'file': 'fileName2', 'key':5, title:'u1'}, 
      {'file': 'fileName2', 'key':10, title:'u1'} 
     ]"; 

     var existingList = JsonConvert.DeserializeObject<List<CurrentType>>(input); 

     var dictionary = new Dictionary<string,List<RequiredTypeFile>>(); 


     var distinctFileNames = existingList.Select(x=> x.File).Distinct().ToList(); 

     distinctFileNames.ForEach(x=> 
            { 
             var fileValue = existingList.Where(m=>m.File==x) 
             .Select(m => new RequiredTypeFile 
               { 
                Key = m.Key, 
                Title = m.Title 
               }).ToList(); 
             dictionary.Add(x,fileValue); 
            }); 

     var reqdJson = JsonConvert.SerializeObject(dictionary); 


     Console.WriteLine(reqdJson); 
    } 
} 

public class CurrentType 
{ 
    public string File 
    { 
     get; 
     set; 
    } 

    public int Key 
    { 
     get; 
     set; 
    } 

    public string Title 
    { 
     get; 
     set; 
    } 
} 

public class RequiredTypeFile 
{ 
    public int Key 
    { 
     get; 
     set; 
    } 

    public string Title 
    { 
     get; 
     set; 
    } 

}

関連する問題