我需要生成以下JSON,我曾尝试使用JavaScriptSerializer,但我无法找到解决方案,需要指导才能实现相同的目标。
{
"task": {
"taskState": "Running",
"taskStatus": "Ok",
"completedSteps": 1,
"taskProgress": [{
"message": "test message",
"timeStamp": "date_time"
}]
}
}
我知道它非常基本,但我现在很久以前就陷入困境。
答案 0 :(得分: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的工作示例还有https://dotnetfiddle.net/ZYcZKp
然后你可以将该字典序列化为json。
PS:作为建议,您可以考虑使用Newtonsoft.Json(https://www.nuget.org/packages/Newtonsoft.Json/)
PS-Edit:考虑使用动态表达式,这可能会在运行时解析上花费很多。
希望这有帮助。
答案 1 :(得分: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格式生成结果