2016-07-26 2 views
0

중첩 된 객체 생성 : 내 컬렉션에 다음과 같은 형식으로 결과를 반환컬렉션을 반복하는 내가처럼 보이는 모델이

public class SearchResult 
{ 
    public bool success { get; set; } 
    public SearchData data { get; set; } 
} 

public class SearchData 
{ 
    public string UploadDate { get; set; } 
    public List<UserImages> Images { get; set; } 
} 

public class UserImages 
{ 
    public string Filename { get; set; } 
    public string FileId { get; set; } 
} 

FileId FileName UploadDate 
148847 IMG_1.JPG Mar-2012 
135710 IMG_8.JPG Mar-2012 
143817 IMG_6.JPG Jul-2013 
143873 IMG_5.JPG Aug-2014 
145766 IMG_4.JPG Aug-2015 
145820 IMG_3.JPG Jan-2016 
145952 IMG_2.JPG Jan-2016 

내가 그래서 위의 콜렉션을 직렬화 할을 다음 JSON을 생성 할 수 있습니다.

{ 
    "success": true, 
    "SearchData": { 
     "UploadDate": "MAR-2012", 
     "UserImages": [{ 
      "Filename": "IMG_1.JPG", 
      "FileId ": "148847" 
     }, { 
      "Filename": "IMG_8.JPG", 
      "FileId ": "135710" 
     }], 
     "UploadDate": "Jul-2013", 
     "UserImages": [{ 
      "Filename": "IMG_6.JPG", 
      "FileId ": "143817" 
     }] 
    } 
} 

반복 작업을 수행 할 수 없습니다. 나중에 직렬화 할 모델 클래스의 객체를 만들기 위해 컬렉션을 반복 할 수 있습니까?

+1

JSON을 생성하는 코드는? –

+0

json2csharp.com을 통해 JSON을 리버스 엔지니어링하면 'FileId'가 유효하지 않은 속성 이름으로 보입니다. 다른 것으로 변경하고 JSON을 다시 직렬화 할 수 있습니까? JSON에 직렬화하기 위해 당신은 무엇을 사용하고 있습니까? –

+0

JSON 형식의 모든 것을 반환하는 ASP.Net 웹 API를 사용하고 있습니다. 따라서, 루트 객체가 필요하고 컨트롤러 메소드는이를 암묵적으로 JSON에 직렬화합니다. – user1640256

답변

2

이렇게하면 컬렉션을 JSON으로 직렬화 할 수있는 객체 모델로 변환합니다. 그 SearchData는 수집하지가 하나의 항목이 위의 코드에서와 같이 비록

var result = new SearchResult 
{ 
    Success = true, 
    SearchData = results.GroupBy(item => item.UploadDate, 
       (key, grouping) => new SearchData 
       { 
        UploadDate = key, 
        Images = grouping.Select(item => new UserImage 
        { 
         FileName = item.FileName, 
         FileId = item.FileId 
        }).ToList() 
       }).ToList() 
}; 

var json = new JavaScriptSerializer().Serialize(result); 
var json_otherWay = Newtonsoft.Json.JsonConvert.SerializeObject(result); 

주의 사항 :

public class SearchResult 
{ 
    public bool Success { get; set; } 
    public List<SearchData> Data { get; set; } 
} 

내가 here

+0

새로운 SearchResult 클래스 정의에 추가하여 수정할 필요가 있음을 분명히했습니다. – RoadieRich

+0

@RoadieRich - 문제가 해결 된 경우 질문에 대답 해 주시면 감사하겠습니다. :) –

+0

. 감사. – user1640256

0

시도해보십시오.

using Newtonsoft.Json; 

public class SearchData 
{ 
    public string UploadDate { get; set; } 
    public List<UserImages> Images { get; set; } 
    public bool success { get; set; } 
} 

public class UserImages 
{ 
    public string Filename { get; set; } 
    public string FileId { get; set; } 
} 

var result= JsonConvert.DeserializeObject<List<SearchData>>("JsonString") 
1

이 고전 그룹별로 같은 소리에서 갔던 JSON 부분 문제. 다음은 컴파일을 모든 테스트 클래스에 붙여 넣기해야하는 자체 포함 예제입니다.

public class SearchResult 
{ 
    public bool success { get; set; } 
    public SearchData data { get; set; } 
} 

public class SearchData 
{ 
    public string UploadDate { get; set; } 
    public IEnumerable<UserImages> Images { get; set; } 
} 

public class UserImages 
{ 
    public string Filename { get; set; } 
    public string FileId { get; set; } 
} 

public class FlatData 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public DateTime Date { get; set; } 
} 

public static void Test() 
{ 
    //generate arbitrary dates to group on 
    var dates = Enumerable.Range(0, 3).Select(x => DateTime.Today.AddDays(x)).ToArray(); 
    //generate some sample data in the flat format 
    var flatData = Enumerable.Range(1, 10).Select(x => new FlatData() { Id = x.ToString(), Name = "Image_" + x, Date = dates[x % 3] }); 

    //group the flat data into the hierarchical format 
    var grouped = from item in flatData 
        group item by item.Date into g 
        select new SearchData() 
        { 
         UploadDate = g.Key.ToShortDateString(), 
         Images = from img in g 
           select new UserImages() 
           { 
            FileId = img.Id, 
            Filename = img.Name 
           } 
        }; 

    //Serialization implementation abstracted, as it should be 
    var json = Common.Helper.SerializeJSON(grouped); 
}} 

샘플 JSON 출력 :

[ 
    { 
     "UploadDate":"7/27/2016", 
     "Images":[ 
     { 
      "Filename":"Image_1", 
      "FileId":"1" 
     }, 
     { 
      "Filename":"Image_4", 
      "FileId":"4" 
     }, 
     { 
      "Filename":"Image_7", 
      "FileId":"7" 
     }, 
     { 
      "Filename":"Image_10", 
      "FileId":"10" 
     } 
     ] 
    }, 
    { 
     "UploadDate":"7/28/2016", 
     "Images":[ 
     { 
      "Filename":"Image_2", 
      "FileId":"2" 
     }, 
     { 
      "Filename":"Image_5", 
      "FileId":"5" 
     }, 
     { 
      "Filename":"Image_8", 
      "FileId":"8" 
     } 
     ] 
    }, 
    { 
     "UploadDate":"7/26/2016", 
     "Images":[ 
     { 
      "Filename":"Image_3", 
      "FileId":"3" 
     }, 
     { 
      "Filename":"Image_6", 
      "FileId":"6" 
     }, 
     { 
      "Filename":"Image_9", 
      "FileId":"9" 
     } 
     ] 
    } 
] 
관련 문제