来自使用 C# 的 ASP.Net Web 服务的 Json

本文关键字:Net Web 服务 Json ASP | 更新日期: 2023-09-27 17:56:00

我想使用 ASP.Net 网络服务从SQL数据库表生成以下json。 然后我将在 D3.js 中可视化。

我需要的是如何使用 C# 将数据表转换为以下 JSON 格式。

我的 SQL 查询就像

select SiteName,status,conformed,total from
[Output].SIT_W10_Application_Readiness_overview_siteview

SQL 输出:

location        status      value           total
111, Valencia   conformed   1               26
111, Valencia   Testing     22              26

我尝试过的代码:

public class Propm234
    {
        public string SiteName{ get; set; }
        public string status{ get; set; }
        public string conformed{ get; set; }
        public string total{ get; set; }
    }

    List<Propm234> p91 = new List<Propm234> { };
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]
    public string get_SITAppr()
    {
        string query = "select SiteName,status,conformed,total from
[Output].SIT_W10_Application_Readiness_overview_siteview";
        SqlCommand cmd = new SqlCommand(query);
        string a = GetSITData11(cmd);
        DataSet ds = GetSITData1(cmd);
        DataTable dt = ds.Tables[0];
        foreach (DataRow item in ds.Tables[0].Rows)
        {
            Propm234 pp = new Propm234();
            pp.SiteName= item["SiteName"].ToString();
            pp.status = item["ws"].ToString();
            pp.conformed= item["W10Tested"].ToString();
            pp.total= item["TotalPackage"].ToString();
            p91.Add(pp);
        }
        JavaScriptSerializer jss = new JavaScriptSerializer();
        string ss = jss.Serialize(p91);
        return ss;
    }

当前代码返回:

[
   {
     "location":"111, Valencia, (VE),SEDCS349",
     "status":"conformed",
     "value":"1",
     "total":"26"}
   }
]

但我期望的 JSON 来自 C# 网络服务

如下
jsonData = [
               {
                 "key": "Total",
                 "values": [
                             {"label": "111, Valencia", "value": 26},
                           ]
              },
              {
                "key": "Conformed",
                "values": [
                            {"label": "111, Valencia", "value": 1}                              
                         ]
             },
             {
                "key": "Testing",
                "values": [
                             {"label": "111, Valencia", "value": 22}
                         ]
             }
             ];

来自使用 C# 的 ASP.Net Web 服务的 Json

看看 JSON.NET 序列化。 我怀疑你的Propm234()班里有这样的事情:

[JsonProperty(PropertyName = "location")]
public string Vendor { get; set; }

但是,为了尝试回答您的问题,如果您希望 JSON 看起来像您的第一个示例,您的 C# 对象也必须看起来像这样。

public class JsonObject
{
    public string Key { get; set; }
    public Dictionary<string, string> Values { get; set; }
}

显然,您不必使用字典来表示您的值,如果您想将其设置为您想要的任何类型。 但这个故事的寓意是,如果你不序列化列表,你就不会得到一个列表。 你得到一个值,因为这是你所有的序列化,你没有指定一个Key对象或一个Values对象。

如果不想为序列化执行特定的 JSON 类,可以使用匿名对象,例如:

Object jsonObj = new {
    key = "conformed",
    values = Propm234List.Select(s => 
        new { 
            label = s.label,
            value = s.value
        }
    )
}
JavaScriptSerializer jss = new JavaScriptSerializer();
string ss = jss.Serialize(jsonObj );
return ss;