Формат ответа веб-службы ASP.NET JSON - PullRequest
6 голосов
/ 06 августа 2009

Я написал один простой веб-сервис, который получает список продуктов в JSONText, который является строковым объектом

Код веб-службы ниже

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;

/// <summary>
/// Summary description for JsonWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class JsonWebService : System.Web.Services.WebService 
{

    public JsonWebService () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string GetProductsJson(string prefix) 
    {
        List<Product> products = new List<Product>();
        if (prefix.Trim().Equals(string.Empty, StringComparison.OrdinalIgnoreCase))
        {
            products = ProductFacade.GetAllProducts();
        }
        else
        {
            products = ProductFacade.GetProducts(prefix);
        }
        //yourobject is your actula object (may be collection) you want to serialize to json
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(products.GetType());
        //create a memory stream
        MemoryStream ms = new MemoryStream();
        //serialize the object to memory stream
        serializer.WriteObject(ms, products);
        //convert the serizlized object to string
        string jsonString = Encoding.Default.GetString(ms.ToArray());
        //close the memory stream
        ms.Close();
        return jsonString;
    }
}

теперь это дает мне ответ, как показано ниже:

{"d": "[{\" ProductID \ ": 1, \" ProductName \ ": \" Product 1 \ "}, {\" ProductID \ ": 2, \" ProductName \ ": \" Product 2 \ "}, {\" ProductID \ ": 3, \" ProductName \ ": \" Product 3 \ "}, {\" ProductID \ ": 4, \" ProductName \ ": \" Product 4 \ " }, {\ "ProductID \": 5, \ "ProductName \": \ "Product 5 \"}, {\ "ProductID \": 6, \ "ProductName \": \ "Product 6 \"}, {\ "ProductID \": 7, \ "ProductName \": \ "Product 7 \"}, {\ "ProductID \": 8, \ "ProductName \": \ "Product 8 \"}, {\ "ProductID \" : 9, \ "ProductName \": \ "Product 9 \"}, {\ "ProductID \": 10, \ "ProductName \": \ "Product 10 \"}] "}

Но я ищу ниже, поставил

[{"ProductID": 1, "ProductName": "Product 1"}, {"ProductID": 2, "ProductName": "Product 2"}, {"ProductID": 3, "ProductName": " Product 3 "}, {" ProductID ": 4," ProductName ":" Product 4 "}, {" ProductID ": 5," ProductName ":" Product 5 "}, {" ProductID ": 6," ProductName ": «Product 6»}, {«ProductID»: 7, «ProductName»: «Product 7»}, {«ProductID»: 8, «ProductName»: «Product 8»}, {«ProductID»: 9, «ProductName» : "Product 9"}, {"ProductID": 10, "ProductName": "Product 10"}]

Может кто-нибудь сказать мне, в чем проблема

Спасибо

Ответы [ 4 ]

8 голосов
/ 06 августа 2009

Сначала было внесено изменение в ASP.NET 3.5 по соображениям безопасности. Microsoft добавила в ответ букву "d". Ниже приведена ссылка от Дейва Уорда из Encosia, в которой говорится о том, что вы видите: Сильное изменение между версиями ASP.NET AJAX . У него есть несколько постов, в которых говорится об этом, которые могут помочь вам в дальнейшей обработке JSON и ASP.NET

0 голосов
/ 13 марта 2015

Обратите внимание, что в вашем ответе есть двойные кавычки рядом с вашим массивом. Таким образом, вы возвращаете формат json, а не объект json из веб-метода ur. Чтобы проанализировать строку json для объекта json. Если вы не хотите использовать функцию разбора, вам нужно удалить сериализацию в вашем веб-методе. Таким образом, вы получите объект json.

0 голосов
/ 08 октября 2013

в веб-сервисе .net

        [WebMethod]
        public string Android_DDD(string KullaniciKey, string Durum, string PersonelKey)
        {
        return EU.EncodeToBase64("{\"Status\":\"OK\",\"R\":[{\"ImzaTipi\":\"Paraf\", \"Personel\":\"Ali Veli üğişçöıÜĞİŞÇÖI\", \"ImzaDurumTipi\":\"Tamam\", \"TamamTar\":\"1.1.2003 11:21\"},{\"ImzaTipi\":\"İmza\", \"Personel\":\"Ali Ak\", \"ImzaDurumTipi\":\"Tamam\", \"TamamTar\":\"2.2.2003 11:21\"}]}");
       }

static public string EncodeToBase64(string toEncode)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        byte[] bytes = encoding.GetBytes(toEncode);
        string returnValue = System.Convert.ToBase64String(bytes);
        return returnValue;
    }

в андроиде

 private static String convertStreamToString(InputStream is)
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try
        {
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                is.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

 private void LoadJsonDataFromASPNET()
    {
        try
        {           

            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpPost httpPostRequest = new HttpPost(this.WSURL + "/WS.asmx/Android_DDD");

            JSONObject jsonObjSend = new JSONObject();
            jsonObjSend.put("KullaniciKey", "value_1");
            jsonObjSend.put("Durum", "value_2");
            jsonObjSend.put("PersonelKey", "value_3");

            StringEntity se = new StringEntity(jsonObjSend.toString());
            httpPostRequest.setEntity(se);
            httpPostRequest.setHeader("Accept", "application/json");
            httpPostRequest.setHeader("Content-type", "application/json");
            // httpPostRequest.setHeader("Accept-Encoding", "gzip"); // only set this parameter if you would like to use gzip compression

            HttpResponse response = (HttpResponse) httpclient.execute(httpPostRequest);
            HttpEntity entity = response.getEntity();
            if (entity != null)
            {
                InputStream instream = entity.getContent();
                String resultString = convertStreamToString(instream);
                instream.close();

                resultString = resultString.substring(6, resultString.length()-3);
                resultString = new String(android.util.Base64.decode(resultString, 0), "UTF-8");
                JSONObject object = new JSONObject(resultString);
                String oDurum = object.getString("Status");
                if (oDurum.equals("OK"))
                {
                    JSONArray jsonArray = new JSONArray(object.getString("R"));
                    if (jsonArray.length() > 0)
                    {
                        for (int i = 0; i < jsonArray.length(); i++)
                        {
                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            String ImzaTipi = jsonObject.getString("ImzaTipi");
                            String Personel = jsonObject.getString("Personel");
                            String ImzaDurumTipi = jsonObject.getString("ImzaDurumTipi");
                            String TamamTar = jsonObject.getString("TamamTar");
                            Toast.makeText(getApplicationContext(), "ImzaTipi:" + ImzaTipi + " Personel:" + Personel + " ImzaDurumTipi:" + ImzaDurumTipi + " TamamTar:" + TamamTar, Toast.LENGTH_LONG).show();
                        }   
                    }
                }               

            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
0 голосов
/ 28 мая 2010

На самом деле, если вы просто удалите

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

из метода, и вы возвращаете jsonString , который вы сериализовали с помощью JavaScriptSerializer, вы получите точно тот результат, который вы искали.

...