1

以下は、 JSON文字列を返そうとするasp Webサービスの出力です(JSON文字列を返しているかどうかはわかりません)。

ここに画像の説明を入力してください

Androidアプリケーションがこれを消費した後、文字列は次のようになります。

GetCustomerListResponse {GetCustomerListResult = [{"VehicleID": "KL-9876"、 "VehicleType": "Nissan"、 "VehicleOwner": "Sanjiva"}];}

[これはjson文字列ではないことをかなり確信しています]。

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サービスコード:

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

}
4

2 に答える 2

1

こんにちは@Kasanovaは次のようなjsonとしてサービスの応答形式を作成します:

 [OperationContract]
 [WebGet(UriTemplate = "data/id={value}", ResponseFormat = WebMessageFormat.Json)]
 string[] GetUser(string Id);
于 2012-12-31T08:52:26.640 に答える
1

WCF サービスは、XML と JSON が混在しています。純粋な JSON を返すサービスに変更する必要があります。

http://localhost:49476/JsonService.svc/vehiclelistその後、URLを使用して JSON メソッドにアクセスできますhttp://localhost:49476/JsonService.svc/randomvehicle(ポート番号はケースによって異なります)。Webブラウザで試してみてください。

この回答もご覧ください。この回答に加えて、POST リクエストを使用して大量のデータをサービスに送信する方法を示しています。

WCF サービスに JSON クラスを使用していないことに注意してください。代わりに、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 を使用してデータを取得し、解析する必要があります。StackOverflow には、その方法を示す多くの例があります。

于 2012-12-30T09:44:27.860 に答える