2016-10-07 1 views
3

반환 된 JSON 배열을 RESTful GET 요청에서 C# 일반 오래된 객체 모델로 성공적으로 역 직렬화합니다.json.net을 사용하여 JSON을 deserializing하고 배열 인덱스를 모델 속성으로 추출하려고합니다.

[JSONProperty foo] 주석을 사용하여 JSON 이름을 내 모델 속성에 바인딩합니다.

[{ 
    "ProductCode": "0129923083091", 
    "Description": "DIESEL ", 
    "SalesLitres": 6058.7347, 
    "SalesValue": 6416.2000 
}, 
{ 
    "ProductCode": "0134039344902", 
    "Description": "UNLEADED ", 
    "SalesLitres": 3489.8111, 
    "SalesValue": 3695.7100 
}, 
... 
] 

내가 항목을 JSON에서 반환 된 배열의 외관의 순서에 따라 합성 내 모델 내에서 고유 인덱스 필드에 가까운 무언가를 창조하고 싶은 :

같은 JSON 데이터가 모습을 반환 . 과 같이

참고로

(색인 속성없이) 내 현재 주석 같습니다, Newtonsoft JSON.net ... 에 의해 제공이의 주석이 있는가 또는

namespace App8.Models 
{ 
    public class ReportRow 
    { 
     [JsonProperty("ProductCode")] 
     public string ProductCode { get; set; } = string.Empty; 

     [JsonProperty("Description")] 
     public string Description { get; set; } = string.Empty; 

     [JsonProperty("SalesLitres")] 
     public double SalesLitres { get; set; } = 0.0; 

     [JsonProperty("SalesValue")] 
     public double SalesValue { get; set; } = 0.0;  
    } 
} 

일부 코드가있는 본질적으로 기본 키를 만들기 위해 getter/setter 내에 배치 할 수 있습니까?

답변

1

데이터

var data = JsonConvert.DeserializeObject<List<ReportRow>>(json); 

당신은 인덱스를 얻기 위해 LINQ를 선택 사용할 수 직렬화를 해제 한 후

public class ReportRow { 
    public int Index { get; set; } 

    [JsonProperty("ProductCode")] 
    public string ProductCode { get; set; } = string.Empty; 

    [JsonProperty("Description")] 
    public string Description { get; set; } = string.Empty; 

    [JsonProperty("SalesLitres")] 
    public double SalesLitres { get; set; } = 0.0; 

    [JsonProperty("SalesValue")] 
    public double SalesValue { get; set; } = 0.0;  
} 

가정.

var indexedData = data.Select((item, index) => { 
    item.Index = index; 
    return item; 
}).ToList(); 

또는 인덱스가 모델의 속성이 아닌 경우 해당 유형을 즉시 만들 수 있습니다.

var indexedData = data.Select((item, index) => new { 
    Index = index, 
    ReportRow = item 
}).ToList(); 
+0

아주 좋아 보인다. 나는 확실히 그것을 시도 할 것이다. – retail3r

+0

linq를 사용하여 부작용을 일으키는 것은 약간 비웃음입니다. 쿼리를 열거하지 않으면 부작용이 실행되지 않습니다! –

관련 문제