2017-12-12 14 views
2

데이터 테이블 행을 JSON 문자열로 변환 중입니다. Javascript serializer를 사용하여 일반적인 JSON 문자열을 생성했습니다. 어떻게 중첩 된 문자열로 생성 할 수 있습니까?C#에서 Javascript serializer를 사용하여 중첩 JSON에 DataTable

현재 JSON 출력

{ 
    "PatientId":"32424", 
    "CustomerId":"XXXX", 
    "Name":"DiastolicBloodPressure", 
    "Value":89, 
    "Unit":"mmHg", 
    "MinValue":50, 
    "MaxValue":90, 
    "SessionElementResponseText":null 
} 

예상

{ 
    "PatientId":"32424", 
    "CustomerId":"XXXX", 
    "VitalThreshold":{ 
     "Name":"DiastolicBloodPressure", 
     "Value":89, 
     "Unit":"mmHg", 
     "MinValue":50, 
     "MaxValue":90 
    }, 
    "SessionElementResponseText":null 
} 

코드

public static string DataTableToJSON(DataTable table) 
{ 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
    Dictionary<string, object> row; 
    foreach(DataRow dr in table.Rows) 
    { 
     row = new Dictionary<string, object>(); 
     foreach(DataColumn col in table.Columns) 
     { 
      if(col.ColumnName.Equals("Name")) 
      { 
       //Trying here 
      } 
      row.Add(col.ColumnName, dr[col]); 
     } 
     rows.Add(row); 
    } 
    serializer.MaxJsonLength = int.MaxValue; 
    return serializer.Serialize(rows); 
} 
+0

DataTable의 데이터는 어떻게 비슷하게 생깁니 까? –

+0

@RawitasKrungkaew - DataTable은 위에 표시된 '현재 Json 출력'과 유사합니다. 데이터 테이블의 열 이름은 PatientId | CustomerId | 이름 | 가치 | 단위 | MinValue | MaxValue | SessionElementResponseText – shockwave

답변

1

기본적으로 하나의 조건을 추가하여 내부 행을 버퍼링해야합니다. 그런 다음 루프의 끝에서 주 행에 "내부 행"을 추가하십시오.

2
public static string DataTableToJSON(DataTable table) 
{ 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
    string[] keys = new string[] { "Name", "Value", "Unit", "MinValue", "MaxValue" }; 
    foreach(DataRow dr in table.Rows) 
    { 
     Dictionary<string, object> row = new Dictionary<string, object>(); 
     Dictionary<string, object> dict = new Dictionary<string, object>(); 
     foreach(DataColumn col in table.Columns) 
     { 
      if(keys.Contains(col.ColumnName)) dict.Add(col.ColumnName, dr[col]); 
      else row.Add(col.ColumnName, dr[col]); 
     } 
     row.Add("VitalThreshold", dict); 
     rows.Add(row); 
    } 
    serializer.MaxJsonLength = int.MaxValue; 
    return serializer.Serialize(rows); 
}