[android]我如何使用 Json 字符串?

标签: Asp.net json Android
发布时间: 2017/3/14 0:29:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

以下是一个 asp web service 试图返回一个 JSON 字符串的输出(不知道如果它返回的 JSON 字符串)。

enter image description here

android application 消耗这字符串如下︰

GetCustomerListResponse {GetCustomerListResult = [{"VehicleID":"KL-9876"、"VehicleType":"日产"、"VehicleOwner":"桑吉瓦"}];}

[肯定它不是一个 json 字符串哪种 im]。

我想要知道什么变化,我应该作出这样那 android 程序消费的 json 字符串。

很多提前,谢谢,我完整 aspx 代码和 android 下面提供的代码。

ANDROID代码︰

    package com.example.objectpass;


        import android.app.Activity;
        import android.os.Bundle;
        import android.util.Log;
        import android.widget.ArrayAdapter;
        import android.widget.Spinner;
        import android.widget.TextView;

        import org.json.JSONArray;
        import org.json.JSONObject;
        import org.ksoap2.*;
        import org.ksoap2.serialization.SoapObject;
        import org.ksoap2.serialization.SoapPrimitive;
        import org.ksoap2.serialization.SoapSerializationEnvelope;
        import org.ksoap2.transport.*;

        public class MainActivity extends Activity {
            TextView resultA;
            Spinner spinnerC;

            @Override
            public void onCreate(Bundle savedInstanceState) {
                String[] toSpinnerSum;
                toSpinnerSum = new String[9];

                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                spinnerC = (Spinner) findViewById(R.id.spinner1);
                resultA = (TextView) findViewById(R.id.textView2);

                final String NAMESPACE = "http://tempuri.org/";
                final String METHOD_NAME = "GetCustomerList";
                final String SOAP_ACTION = "http://tempuri.org/GetCustomerList";
                final String URL = "http://192.168.1.100/WebService4/Service1.asmx";

                SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
                SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
                soapEnvelope.dotNet = true;
                soapEnvelope.setOutputSoapObject(Request);
                AndroidHttpTransport aht = new AndroidHttpTransport(URL);



                try {
                    aht.call(SOAP_ACTION, soapEnvelope);
                    SoapObject response = (SoapObject) soapEnvelope.bodyIn;

                    JSONArray jArray = new JSONArray();

                    resultA.setText(response.toString());

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

ASP WEB SERVICE 代码︰

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using Newtonsoft.Json;

namespace WebService4
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
       [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string GetCustomerList()
        {
            Vehicle vehi = simpleCase();
            List<Vehicle> newL = new List<Vehicle> { vehi };
            string output = JsonConvert.SerializeObject(newL);
           // return newL;
            return output;
        }




        [WebMethod]
        public Vehicle simpleCase()
        {
            Vehicle obj = new Vehicle();
            obj.VehicleID = "KL-9876";
            obj.VehicleType = "Nissan";
            obj.VehicleOwner = "Sanjiva";
            return obj;
        }
    }



    public class Vehicle
    {
        public string VehicleID { get; set; }
        public string VehicleType { get; set; }
        public string VehicleOwner { get; set; }
    }

}

解决方法 1:

你的 WCF service 是一种混合 XML 和 JSON。你会想要改变它入 service 纯 JSON 返回的。

然后,您可以访问您使用 Url 的 JSON 方法 http://localhost:49476/JsonService.svc/vehiclelisthttp://localhost:49476/JsonService.svc/randomvehicle (端口号将你的情况不同)。只是试一试在您的网站 browser

你可能还想要看一看这个答案。除了这个答案,它演示如何使用 POST 请求发送大量的数据到 service

注意,不要使用任何 JSON 类为 WCF service 。相反,W

IJsonService.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace SimpleJsonService
{
    [ServiceContract]
    public interface IJsonService
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.Bare,
           UriTemplate = "/vehiclelist")]
        List<Vehicle> GetCustomerList();

        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.Bare,
           UriTemplate = "/randomvehicle")]
        Vehicle RandomVehicle();
    }


    [DataContract]
    public class Vehicle
    {
        [DataMember]
        public string VehicleID { get; set; }
        [DataMember]
        public string VehicleType { get; set; }
        [DataMember]
        public string VehicleOwner { get; set; }
    }
}

JsonService.svc.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace SimpleJsonService
{
    public class JsonService : IJsonService
    {
        public List<Vehicle> GetCustomerList()
        {
            Vehicle vehicle = RandomVehicle();
            List<Vehicle> vehicleList = new List<Vehicle> { vehicle };
            return vehicleList;
        }

        public Vehicle RandomVehicle()
        {
            Vehicle vehicle = new Vehicle();
            vehicle.VehicleID = "KL-9876";
            vehicle.VehicleType = "Nissan";
            vehicle.VehicleOwner = "Sanjiva";
            return vehicle;
        }
    }
}

JsonService.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="SimpleJsonService.JsonService" CodeBehind="JsonService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

Web.config:

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

Android 的一面,你会想要使用 HTTPClient 和 JSONObject/JSONArray 来检索数据,并分析它。有许多例子在计算器上的显示如何去做。

赞助商