2017-02-17 5 views
0

그래서 내 데이터베이스에서 datatable을 반환해야하는 httpget 요청이 있습니다.데이터 테이블로 Httpweb 요청

public string GetResult(DataTable dt) 
{ 
EnumerableRowCollection Result = from row in dt.AsEnumerable() 
           select new 
           { 
            account = (string)row["ACCOUNT_ID"], 
            balance = (decimal)row["BALANCE"] 
           }; 
string json = JsonConvert.SerializeObject(Result, Formatting.None); 
return json; 
}  

을 그리고 난 컨트롤러로 전달 : 나는 (json.net를 사용하여) 다음 JSON 문자열로 직렬화, EnumerableRowCollection에 내 데이터 테이블을 변환합니다. 내가 알아낼 수 없습니다

[{\"account\":\"121\",\"balance\":-348}] 

:

괜찮아요 - - 한 가지를 제외하고 자체 요청을 직렬화되는 컨트롤러와 내가 백 슬래시와 이중 직렬화 된 JSON 문자열 수 (여기에는 JSON의 일부) 다른 방법은 내가 EnumerableRowCollection (JSON 문자열을 사용하지 않음)을 전달할 수 있습니다. 그래서 이중 직렬 json을 얻을 수 없습니까? (아니면 어쩌면 내가 EnumerableRowCollection로 변환해야합니까?)

답변

0

모든 WebAPI 반환 할 개체의 serialize 된 표현을 반환 할 수 있습니다.

이 코드에서는 객체를 JSON 문자열로 직렬화 한 다음 해당 문자열을 다시 인코딩하여 JSON 문자열이됩니다. 이로 인해 큰 따옴표가 생깁니다.

직접 개체를 serialize 할 필요가 없으며 실제로 EnumerableRowCollection을 사용하지 않아도됩니다. 직렬화와 WebAPI 거래를

public class AccountBalanceModel 
{ 
    public string Account { get; set; } 
    public decimal Balance { get; set; }  
} 

그런 다음 API 방식에서 그 반환하고 보자하십시오 DTO를 만들기

public IList<AccountBalanceModel> GetResult(DataTable dt) 
{ 
    var model = dt.AsEnumerable().Select(row => new AccountBalanceModel 
       { 
        Account = (string)row["ACCOUNT_ID"], 
        Balance = (decimal)row["BALANCE"] 
       }).ToList(); 

    return model; 
} 
+0

타이를! 나를 위해 일했다. .ToList()를 제외하고는 return model.ToList()를 호출 한 경우에만 작동했습니다. – Eve

+0

그래, 그 문법 오류는 작았습니다. 일반적으로 유창한 구문을 사용합니다. – CodeCaster

관련 문제