【问题标题】:Json from ASP.Net webservice using C# [closed]使用 C# 来自 ASP.Net webservice 的 Json [关闭]
【发布时间】:2016-07-08 17:08:27
【问题描述】:

我想使用 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"}
   }
]

但我期望一个来自 C# webservice 的 json 在下面

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}
                         ]
             }
             ];

【问题讨论】:

  • 太好了。你写了什么代码来解决这个问题?
  • 查看我添加的代码..
  • 如果是python,我可以轻松完成...我是C#新手...请不要降级...
  • 那么您提供的代码有什么问题?
  • @sen 请将当前代码返回的 json 添加到问题中。当人们试图提供帮助时,不要有辱人格。您没有在问题中包含任何代码,Daniel 先生指出这一点是正确的。而且你不知道是他对你投了反对票。

标签: c# asp.net json web-services


【解决方案1】:

看看JSON.NET Serialization。我怀疑你的 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;

【讨论】:

  • 亲爱的 dckuehn,我尝试了我提到的 sql 结果,但没有得到预期的结果。我也很困惑如何实现你的逻辑。请帮帮我
  • @sen 我添加了序列化位。你明白我的意思吗?您的代码不会将从 SQL 语句中检索到的值拆分为键值组。我的代码试图向您展示如何使用“符合”来做到这一点。您还必须处理“total”和“testing”,并将它们组合成一个键值列表,并序列化整个列表以获得您想要的结果。
  • ya...终于我得到并取得了结果..非常感谢..
猜你喜欢
  • 2017-03-26
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多