ANDROID与.Net之间JSON实践

Asp.Net端:

JsonHelper.cs

using System.Runtime.Serialization.Json;

using System.IO;

using System.Text;



namespace NetJSON

{

    /// <summary>

    /// JSON序列化和反序列化辅助类

    /// </summary>

    public class JsonHelper

    {

        /// <summary>

        /// JSON序列化

        /// </summary>

        public static string JsonSerializer<T>(T t)

        {

            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));

            MemoryStream ms = new MemoryStream();

            ser.WriteObject(ms, t);

            string jsonString = Encoding.UTF8.GetString(ms.ToArray());

            ms.Close();

            return jsonString;

        }



        /// <summary>

        /// JSON反序列化

        /// </summary>

        public static T JsonDeserialize<T>(string jsonString)

        {

            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));

            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

            T obj = (T)ser.ReadObject(ms);

            return obj;

        }

    }

}

JSON.aspx.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Collections;



namespace NetJSON

{

    public partial class JSON : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            string flag = Request["action_flag"];

            string jsonStr = "";

            switch (flag)

            {

                case "person":

                    var p = new Person();

                    p.Id = 100;

                    p.Name = "张三";

                    p.Address = "北京朝阳";

                    jsonStr = JsonHelper.JsonSerializer<Person>(p);

                    break;

                case "persons":

                    List<Person> persons = new List<Person>();

                    persons.Add(new Person

                    {

                        Id = 101,

                        Name = "李四",

                        Address = "北京昌平"

                    });

                    persons.Add(new Person

                    {

                        Id = 102,

                        Name = "王五",

                        Address = "北京顺义"

                    });

                    persons.Add(new Person

                    {

                        Id = 103,

                        Name = "赵六",

                        Address = "天津南开"

                    });

                    jsonStr = JsonHelper.JsonSerializer<List<Person>>(persons);

                    break;

                case "stringList":

                    List<string> strs = new List<string>();

                    strs.Add("china");

                    strs.Add("beijing");

                    strs.Add("chaoyang");

                    jsonStr = JsonHelper.JsonSerializer<List<string>>(strs);

                    break;

                case "listMap":

                    List<Hashtable> listMap = new List<Hashtable>();

                    Hashtable ht = new Hashtable();

                    ht.Add("Id", 203);

                    ht.Add("Name", "老赵");

                    ht.Add("Age", 36);

                    listMap.Add(ht);

                    ht = new Hashtable();

                    ht.Add("Id", 204);

                    ht.Add("Name", "老张");

                    ht.Add("Age", 46);

                    ht.Add("Married", true);

                    listMap.Add(ht);



                    List<SortedDictionary<string, object>> list = new List<SortedDictionary<string, object>>();

                    SortedDictionary<string, object> dict = new SortedDictionary<string, object>();

                    dict.Add("Id", 334);

                    dict.Add("Name", "XYZ");

                    list.Add(dict);

                    dict = new SortedDictionary<string, object>();

                    dict.Add("Id", 334);

                    dict.Add("Address", "XYZ");

                    dict.Add("Married", false);

                    list.Add(dict);

                    jsonStr = JsonHelper.JsonSerializer<List<SortedDictionary<string, object>>>(list);

                    break;

            }

            Response.Write(jsonStr);

            Response.End();

        }

    }



    public class Person

    {

        public int Id { get; set; }

        public string Name { get; set; }

        public string Address { get; set; }

    }

}

返回的JSON结果:

person:

{"Address":"北京朝阳","Id":100,"Name":"张三"}

persons:

[{"Address":"北京昌平","Id":101,"Name":"李四"},{"Address":"北京顺义","Id":102,"Name":"王五"},{"Address":"天津南开","Id":103,"Name":"赵六"}]

stringList:

["china","beijing","chaoyang"]

listMap:

[[{"Key":"Id","Value":201},{"Key":"Name","Value":"老赵"}],[{"Key":"Id","Value":203},{"Key":"Birthday","Value":"\/Date(232214400000+0800)\/"},{"Key":"Married","Value":true}]]

 

Android端:

Person.java

package com.example.netjson;



public class Person {

    private int id;

    private String name;

    private String address;



    public Person() {

        super();

    }



    public Person(int id, String name, String addrss) {

        super();

        this.id = id;

        this.name = name;

        this.address = addrss;

    }



    public int getId() {

        return id;

    }



    public void setId(int id) {

        this.id = id;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public String getAddress() {

        return address;

    }



    public void setAddress(String address) {

        this.address = address;

    }



    @Override

    public String toString() {

        return "Person [addrss=" + address + ", id=" + id + ", name=" + name

                + "]";

    }

}

JSONTool.java

package com.example.netjson;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;



import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;



/**

 * 完成对JSON数据的解析

 * 

 * @author wulianghuan

 * 

 */

public class JSONTool {



    public JSONTool() {



    }



    public static String createjsonString(String key, Object value) {

        JSONObject jsonObject = new JSONObject();

        try {

            jsonObject.put(key, value);

        } catch (JSONException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return jsonObject.toString();

    }



    /**

     * 获取对象数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static Person getPerson(String jsonString) {

        Person person = new Person();

        try {

            JSONObject jsonObject = new JSONObject(jsonString);

            JSONObject personObject = jsonObject.getJSONObject(key);

            person.setId(personObject.getInt("Id"));

            person.setName(personObject.getString("Name"));

            person.setAddress(personObject.getString("Address"));

        } catch (JSONException e) {

            e.printStackTrace();

        }

        return person;

    }



    /**

     * 获取对象数组数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static List<Person> getPersons(String jsonString) {

        List<Person> list = new ArrayList<Person>();

        try {

            JSONArray jsonArray = new JSONArray(jsonString);

            // 返回json的数组

            for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject jsonObject2 = jsonArray.getJSONObject(i);

                Person person = new Person();

                person.setId(jsonObject2.getInt("Id"));

                person.setName(jsonObject2.getString("Name"));

                person.setAddress(jsonObject2.getString("Address"));

                list.add(person);

            }

        } catch (JSONException e) {

            e.printStackTrace();

        }



        return list;

    }



    /**

     * 获取String数组数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static List<String> getList(String jsonString) {

        List<String> list = new ArrayList<String>();

        try {

            JSONArray jsonArray = new JSONArray(jsonString);

            for (int i = 0; i < jsonArray.length(); i++) {

                String msg = jsonArray.getString(i);

                list.add(msg);

            }

        } catch (JSONException e) {

            e.printStackTrace();

        }

        return list;

    }



    /**

     * 获取对象的Map集合数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static List<Map<String, Object>> getListMap(String jsonString) {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        try {

            JSONArray jsonArray = new JSONArray(jsonString);

            for (int i = 0; i < jsonArray.length(); i++) {

                JSONArray jsonArray2 = jsonArray.getJSONArray(i);

                Map<String, Object> tmpMap = new HashMap<String, Object>();

                for (int j = 0; j < jsonArray2.length(); j++) {

                    Map<String, Object> map = new HashMap<String, Object>();

                    JSONObject jsonObject2 = jsonArray2.getJSONObject(j);

                    Iterator<String> iterator = jsonObject2.keys();

                    while (iterator.hasNext()) {

                        String json_key = iterator.next();

                        Object json_value = jsonObject2.get(json_key);

                        if (json_value == null) {

                            json_value = "";

                        }

                        map.put(json_key, json_value);

                    }

                    tmpMap.put(map.get("Key").toString(), map.get("Value"));

                }

                list.add(tmpMap);

            }

        } catch (JSONException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }



        return list;

    }

}

HTTPUtils.java

package com.example.netjson;



import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;



public class HTTPUtils {



    public HTTPUtils() {

    }



    public static String getJsonContent(String path) {

        try {

            URL url = new URL(path);

            HttpURLConnection connection = (HttpURLConnection) url

                    .openConnection();

            connection.setConnectTimeout(30000);

            connection.setRequestMethod("GET");

            connection.setDoInput(true);

            int code = connection.getResponseCode();

            if (code == 200) {

                return changeInputStream(connection.getInputStream());

            }

        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }



    /**

     * 将一个输入流转换成指定编码的字符串

     * 

     * @param inputStream

     * @return

     */

    private static String changeInputStream(InputStream inputStream) {

        String jsonString = "";

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        int len = 0;

        byte[] data = new byte[1024];

        try {

            while ((len = inputStream.read(data)) != -1) {

                outputStream.write(data, 0, len);

            }

            jsonString = new String(outputStream.toByteArray());

        } catch (IOException e) {

            e.printStackTrace();

        }

        return jsonString;

    }

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >



    <LinearLayout

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:orientation="vertical" >



        <Button

            android:id="@+id/person"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="click"

            android:text="person" />



        <Button

            android:id="@+id/persons"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="click"

            android:text="persons" />



        <Button

            android:id="@+id/stringList"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="click"

            android:text="stringList" />



        <Button

            android:id="@+id/listMap"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:onClick="click"

            android:text="listMap" />



        <TextView

            android:id="@+id/tvShow"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="@string/hello_world" />

    </LinearLayout>



</RelativeLayout>

MainActivity.java

package com.example.netjson;



import java.util.List;

import java.util.Map;



import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.widget.TextView;



public class MainActivity extends Activity {



    String PATH = "http://192.168.0.102:7020/JSON.aspx";

    String TAG = "JSON";

    TextView tvShow;

    Handler handler = new Handler() {

        @Override

        public void handleMessage(Message msg) {

            switch (msg.what) {

            case 0x123:

                tvShow.setText(msg.obj.toString());

                break;

            }

        }

    };



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        tvShow = (TextView) findViewById(R.id.tvShow);

    }



    public void click(final View v) {

        final int vId = v.getId();

        new Thread() {

            public void run() {

                asynCall(vId);

            }

        }.start();

    }



    private void asynCall(int viewId) {

        String jsonStr = "";

        switch (viewId) {

        case R.id.person:

            String path1 = PATH + "?action_flag=person";

            String jsonString1 = HTTPUtils.getJsonContent(path1);

            Person person = JSONTool.getPerson(jsonString1);

            jsonStr = person.toString();

            break;

        case R.id.persons:

            String path2 = PATH + "?action_flag=persons";

            String jsonString2 = HTTPUtils.getJsonContent(path2);

            List<Person> list2 = JSONTool.getPersons(jsonString2);

            jsonStr = list2.toString();

            break;

        case R.id.stringList:

            String path3 = PATH + "?action_flag=stringList";

            String jsonString3 = HTTPUtils.getJsonContent(path3);

            List<String> list3 = JSONTool.getList(jsonString3);

            jsonStr = list3.toString();

            break;

        case R.id.listMap:

            String path4 = PATH + "?action_flag=listMap";

            String jsonString4 = HTTPUtils.getJsonContent(path4);

            List<Map<String, Object>> list4 = JSONTool.getListMap(jsonString4);

            jsonStr = list4.toString();

            break;

        }

        Message msg = new Message();

        msg.what = 0x123;

        msg.obj = jsonStr;

        handler.sendMessage(msg);

    }



    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }



}

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.netjson"

    android:versionCode="1"

    android:versionName="1.0" >



    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="17" />



    <uses-permission android:name="android.permission.INTERNET" />



    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.example.netjson.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>



</manifest>

输出结果:

Person [addrss=北京朝阳, id=100, name=张三]
[Person [addrss=北京昌平, id=101, name=李四], Person [addrss=北京顺义, id=102, name=王五], Person [addrss=天津南开, id=103, name=赵六]]
[china, beijing, chaoyang]
[{Name=老赵, Id=201}, {Married=true, Birthday=/Date(232214400000+0800)/, Id=203}]

你可能感兴趣的:(android)