来自使用 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}
]
}
];
看看 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;