2009-08-06 3 views
5

Я написал одну простую веб-службу, получить список продуктов в JSONText который строковый объектASP.NET Web Service JSON ответ формат

Web Сервис-код ниже

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

теперь дайте мне resoponse как показано ниже:

{"d": "[{\" ProductID \ ": 1, \" ProductName \ ": \" Product 1 \ "}, {\" ProductID \ ": 2, \" ProductName \ ": \" Продукт 2 \ "}, {\" ProductID \ ": 3, \" ProductName \ ": \" Продукт 3 \ "}, {\" ProductID \ ": 4, \" ProductName \ ": \ «Продукт 4 \»}, {\ "ProductID \": 5, \ "ProductName \": \ "Продукт 5 \"}, {\ "ProductID \": 6, \ ProductName \ ": Продукт 6 \"}, {\ "ProductID \ ": 7, \" ProductName \ ": \" Продукт 7 \ "}, {\" ProductID \ ": 8, \" ProductName \ ": \" Продукт 8 \ "}, {\" ProductID \ ": 9 , \ "ProductName \": \ "Продукт 9 \"}, {\ "ProductID \": 10, \ "ProductName \": \ "Продукт 10 \"}] "}

Но я ищу

[{«ProductID»: 1, «ProductName»: «Product 1»}, {«ProductID»: 2, «ProductName»: «Product 2»}, {«ProductID»: 3, «ProductName»: «Продукт 3»}, {«ProductID»: 4, «ProductName»: «Продукт 4»}, {«ProductID»: 5, «ProductName»: «Продукт 5»}, {«ProductID»: 6 , «ProductName»: «Продукт 6»}, {«ProductID»: 7, «ProductName»: «Продукт 7»}, {«ProductID»: 8, «ProductName»: «Продукт 8»}, {«ProductID»: 9, "ProductName": "Р Roduct 9 "}, {" ProductID ": 10," ProductName ":" 10" Продукт}]

может любой сказать мне, что является актуальной проблемой

Благодаря

ответ

7

Сначала было изменение с ASP.NET 3.5 по соображениям безопасности Microsoft добавила ответ «d». Ниже приведена ссылка от Дейва Уорда в Encosia, которая говорит о том, что вы видите: A breaking change between versions of ASP.NET AJAX. У него есть несколько постов, что говорит об этом, что может помочь вам в дальнейшем с обработкой JSON и ASP.NET

+0

Спасибо ewrankin за вас добрый ответ , но моя проблема в том, что мне нужно перейти с рамки asp.net 2.0, так что, пожалуйста, предложите мне, как я могу это достичь. пожалуйста, если у вас есть другой вариант, чем рассказать мне – Hiscal

+0

Прошу прощения, я думаю, что я не понимаю вашего комментария. Вы хотите перейти на ASP.NET 2.0? Поскольку на основе ответа JSON, который вы получаете, вы используете ASP.NET 3.5 из-за добавленного дополнительного «d». Или вы спрашиваете, как работать с «d» в ответе, который вы получаете. – ewrankin

+0

У меня есть работа с вашим предложением, но все же он дает мне то же самое, что и с нежелательным «\», и ​​не дает мне вывод, как {"d": "[{" ProductID ": 1," ProductName ":" Product 1 " }, {«ProductID»: 2, «ProductName»: «Продукт 2»}, {«ProductID»: 3, «ProductName»: «Продукт 3»}, {«ProductID»: 4, «ProductName»: «Продукт 4 "}, {" ProductID ": 5,« ProductName »:« Продукт 5 »}, {« ProductID »: 6,« ProductName »:« Продукт 6 »}, {« ProductID »: 7,« ProductName »:« Продукт 7 "}, {« ProductID »: 8,« ProductName »:« Продукт 8 »}, {« ProductID »: 9,« ProductName »:« Продукт 9 »}, {« ProductID »: 10,« ProductName »: Продукт 10 "}]"} – Hiscal

0

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

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 

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

+2

У меня такая же проблема, но если я удалю этот ResponseFormat, то результат будет завернут новым тегом:

-1

в .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

Подождите, что ????? – Dementic

+0

, когда json-объект передается .net в приложение androi (с помощью [ScriptMethod (ResponseFormat = ResponseFormat.Json)]) ответ от android имеет

+0

Ваш код не имеет отношения к заданному вопросу. – Dementic

0

Обратите внимание, что у вас двойные кавычки рядом Уре массива в вашем response.In таким образом у возвращение JSon формат не JSON объект из ур веб-метод. Формат Json - это строка. Поэтому вам нужно использовать функцию json.parse() для того, чтобы разобрать json-строку на json-объект. Если вы не хотите использовать синтаксический анализ, вам нужно удалить сериализацию в ur web-методе. u получить объект json.

+0

u не нужно добавлять метод ответа на веб-метод ur. Если вы отправляете ur paremeters в jsonformat, как это" { 'prefix': 'asd'} ". net будет возвращать ответ в jsonobject. В противном случае, если u отправит данные ur в форматированном или json-объекте, как этот {'prefix': 'asd'} без двойных кавычек. завернутый в xml. Так что вам нужно использовать формат ответа в это время – Onr

Смежные вопросы