如何从WCF服务返回JSON结果 [英] How to return JSON result from WCF service

查看:73
本文介绍了如何从WCF服务返回JSON结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了WCF服务,我需要返回JSON结果,但我已经返回了List< string>。请帮我解决这个问题以返回JSON结果。



// IService.cs

I have created WCF service, I need to return JSON result, But i have returned List<string>. Kindly help me to solve this problem to return JSON result.

//IService.cs

namespace GenerateService
{
    [ServiceContract]
    public interface IService1
    {
         [OperationContract]
         List<string[]> AutoGenerate(string Content, int count);
    }
}







// Service1.cs






//Service1.cs

public class Service1 : IService1
    {
        public string datatypeval;

        public List<string[]> AutoGenerate(string Content, int count)
        {
            DataSet alRes = new DataSet();
            //string FieldValue;
            List<string[]> Getdetails = new List<string[]>();

            string sval;
            int s = 1; string[] Columns = Content.Split(',').Select(sValue => sValue.Trim()).ToArray();
            foreach (var item in Columns)
            {
                datatypeval += "'" + item + "'" + ",";
            }
            string FieldNames1 = "SELECT SUBSTRING((SELECT ',' + CAST(FId AS VARCHAR) FROM tbl_fieldname where DataTypeName in(" + datatypeval.Remove(datatypeval.Length - 1) + ")FOR XML PATH('')), 2,10000) AS FID";
            alRes = DAL.DBL.returnDataset(FieldNames1);
            string FieldNames = alRes.Tables[0].Rows[0]["FID"].ToString();
            string[] FieldID = FieldNames.Split(',').Select(sValue => sValue.Trim()).ToArray();
            for (int e = 0; e < Columns.Count(); e++)
            {
                //FieldValue = "";
                string qryGetFieldNames = "SELECT TOP (" + count + ")TD1.FID,TD1.Value,TFN.DataTypeName FROM tbl_Data1 TD1 INNER JOIN tbl_FieldName TFN ON TD1.FID=TFN.FID WHERE TD1.FId in (" + FieldID[e] + ") ORDER BY NEWID()";
                alRes = DAL.DBL.returnDataset(qryGetFieldNames);

                for (int i = 0; i < alRes.Tables[0].Rows.Count; i++)
                {
                    // FieldValue += Columns[e] + "::" + alRes.Tables[0].Rows[i]["Value"].ToString() + "~";

                    if (FieldID[e] == alRes.Tables[0].Rows[i]["FID"].ToString())
                    {
                        string[] Checkvalue = new string[FieldID.Length];
                        if (e != 0)
                        {
                            Checkvalue = Getdetails[i];
                        }
                        Checkvalue[e] = alRes.Tables[0].Rows[i]["Value"].ToString();
                        if (e == 0)
                        {
                            Getdetails.Add(Checkvalue);
                        }
                        else
                        {
                            Getdetails[i] = Checkvalue;
                        }
                    }
                }
                s++;
            }
            return Getdetails;
        }
    }





我的尝试:





What I have tried:

public class Service1 : IService1
    {
        public string datatypeval;

        public List<string[]> AutoGenerate(string Content, int count)
        {
            DataSet alRes = new DataSet();
            //string FieldValue;
            List<string[]> Getdetails = new List<string[]>();

            string sval;
            int s = 1; string[] Columns = Content.Split(',').Select(sValue => sValue.Trim()).ToArray();
            foreach (var item in Columns)
            {
                datatypeval += "'" + item + "'" + ",";
            }
            string FieldNames1 = "SELECT SUBSTRING((SELECT ',' + CAST(FId AS VARCHAR) FROM tbl_fieldname where DataTypeName in(" + datatypeval.Remove(datatypeval.Length - 1) + ")FOR XML PATH('')), 2,10000) AS FID";
            alRes = DAL.DBL.returnDataset(FieldNames1);
            string FieldNames = alRes.Tables[0].Rows[0]["FID"].ToString();
            string[] FieldID = FieldNames.Split(',').Select(sValue => sValue.Trim()).ToArray();
            for (int e = 0; e < Columns.Count(); e++)
            {
                //FieldValue = "";
                string qryGetFieldNames = "SELECT TOP (" + count + ")TD1.FID,TD1.Value,TFN.DataTypeName FROM tbl_Data1 TD1 INNER JOIN tbl_FieldName TFN ON TD1.FID=TFN.FID WHERE TD1.FId in (" + FieldID[e] + ") ORDER BY NEWID()";
                alRes = DAL.DBL.returnDataset(qryGetFieldNames);

                for (int i = 0; i < alRes.Tables[0].Rows.Count; i++)
                {
                    // FieldValue += Columns[e] + "::" + alRes.Tables[0].Rows[i]["Value"].ToString() + "~";

                    if (FieldID[e] == alRes.Tables[0].Rows[i]["FID"].ToString())
                    {
                        string[] Checkvalue = new string[FieldID.Length];
                        if (e != 0)
                        {
                            Checkvalue = Getdetails[i];
                        }
                        Checkvalue[e] = alRes.Tables[0].Rows[i]["Value"].ToString();
                        if (e == 0)
                        {
                            Getdetails.Add(Checkvalue);
                        }
                        else
                        {
                            Getdetails[i] = Checkvalue;
                        }
                    }
                }
                s++;
            }
            return Getdetails;
        }
    }

推荐答案

在界面中定义这样的响应格式



Define response format like this in interface

[OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
List<string[]> AutoGenerate(string Content, int count);





您可以根据您的响应结构生成类,您应该相应地返回这些类。



如果您有任何疑问或疑虑,请告诉我。



You can generate classes according to your response structure and You should return that classes accordingly.

Let me know if you have any query or concern.


这篇关于如何从WCF服务返回JSON结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆