2016-10-04 13 views
0

다음 JSON을 생성해야하지만 JavaScriptSerializer를 사용하려고했지만 해결책을 찾지 못했습니다. 지침은 같은 달성합니다.C#에서 JSON 본문을 생성하는 방법, 문자열 및 키와 같이 문자열 및 키와 같이 문자열 및 키와 같이 문자열 및 토큰을 List와 같이 생성하는 방법

{ 
    "task": { 
     "taskState": "Running", 
     "taskStatus": "Ok", 
     "completedSteps": 1, 
     "taskProgress": [{ 
      "message": "test message", 
      "timeStamp": "date_time" 
     }] 
    } 
} 

나는 아주 기본적인 것을 알고 있지만, 나는 꽤 오랜 시간이 걸렸다.

답변

3

사전을 사용하면 다음과 같이 사전의 가치에 모든 종류의 개체를 쉽게 추가 할 수 있습니다.

Dictionary<string,object> myDict = new Dictionary<string,object>(); 
myDict.Add("StringList", new List<string>() { "string1", "string2" }); 
myDict.Add("Bool", false); 
myDict.Add("Int", 2016); 


개선 답 : 일치 주어진 샘플 JSON

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace SO_39849909 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Dictionary<string, object> myDict = new Dictionary<string, object>(); 
      myDict.Add("task", new Dictionary<string, object>()); 

      Dictionary<string, object> innerDict = (myDict["task"] as Dictionary<string, object>); 
      innerDict.Add("taskState", "Running"); 
      innerDict.Add("taskStatus", "Ok"); 
      innerDict.Add("completedSteps", 1); 
      innerDict.Add("taskProgress", new List<dynamic>()); 

      List<dynamic> taskProgress = (innerDict["taskProgress"] as List<dynamic>); 
      taskProgress.Add(new { message = "test message", timeStamp = DateTime.Now }); 

      string json = JsonConvert.SerializeObject(myDict, Formatting.Indented); 
      Console.WriteLine(json); 
      Console.ReadLine(); 
     } 
    } 
} 

는 또한 dotnetfiddle에서 예를 작업하는 여기 그런 다음 JSON으로 그 사전을 직렬화 할 수 https://dotnetfiddle.net/ZYcZKp

입니다.

PS하십시오 조언대로 Newtonsoft.Json (https://www.nuget.org/packages/Newtonsoft.Json/)

PS-편집을 사용하여 고려할 수 있습니다 : 런타임 해결에 큰 비용이 수 동적 표현을 사용하는 것이 좋습니다.

희망이 도움이됩니다.

+0

:' "taskProgress": [{ "메시지" : "test message", "timeStamp": "date_time" }]', 내 테스트 메시지와 date_time은 동적이며, 내 솔루션 맥락에서 솔루션을 해결할 수 있다면 도움이 될 것입니다. 감사합니다 – Sumit

+0

그래서 내 대답을 수정하고 샘플 JSON과 함께 1시 1 분을 충족하는 작업 예제를 만들 @Sumit 희망은 이것이 무엇을 기대했다. –

+0

자세한 답변을 주셔서 감사합니다 Cihan, 이전에 내 JSON 응답을 구성하기 위해 JObject를 사용하고 있었기 때문에 이전에 내 문제에 대한 대체 솔루션이 될 것입니다. coz는 전달할 때 "taskProgress"목록을 만들 수 있었지만 JObject를 통해 각 매개 변수를 jToken으로 추가하면 문제가되는 문자열로 항상 이동합니다. 하지만 당신의 솔루션은 나를 위해 일하고 있습니다. 다시 감사드립니다. :) – Sumit

0

수행이

[WebMethod] 
    public static string data_call() 
    { 
     string result=""; 
     Data td=new Data(); 
     List<spselect_data_Result> selectdata=td.spselect_data().ToList(); 
     DataTable dt=new DataTable(); 
     dt.Columns.Add("RegValues",typeof(string)); 
     dt.Columns.Add("StartDate",typeof(DateTime)); 
     dt.Columns.Add("EndDate",typeof(DateTime)); 

     foreach(var add in selectdata) 
     { 
      dt.Rows.Add(add.RegValues,add.StartDate,add.EndDate); 
     } 
     result=DataSetToJSON(dt); 
     return result; 
    } 

     public static string DataSetToJSON(DataTable dt) 
    { 

     Dictionary<string, object> dict = new Dictionary<string, object>(); 

     object[] arr = new object[dt.Rows.Count + 1]; 

     for (int i = 0; i <= dt.Rows.Count - 1; i++) 
     { 
      arr[i] = dt.Rows[i].ItemArray; 
     } 

     // dict.Add(dt.TableName, arr); 
     dict.Add("response", arr); 
     JavaScriptSerializer json = new JavaScriptSerializer(); 
     return json.Serialize(dict); 

    } 

DataSetToJSON는 JSON 형식으로 결과를 생성 내가의 경우처럼, 내 경우에 대한 솔루션을 구현 드릴 수 없습니다