在c#中如何生成JSON主体,将键作为字符串,令牌作为字符串,键作为字符串,令牌作为列表

本文关键字:字符串 令牌 列表 何生成 JSON 主体 | 更新日期: 2023-09-27 18:11:21

我需要生成以下JSON,我曾尝试使用JavaScriptSerializer,但我无法找到解决方案,需要指导来实现相同的。

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

我知道这是很基本的,但我已经在这一点上停留了很长一段时间了

在c#中如何生成JSON主体,将键作为字符串,令牌作为字符串,键作为字符串,令牌作为列表

您可以尝试使用Dictionary,这样您就可以轻松地将任何类型的对象添加到您的字典值中,如下所示;

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:考虑使用动态表达式,这可能会对运行时解析产生很大的成本。

这样做

    [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格式的结果