Android Gson 操作

JSON序列化后的数据不带类名与名命空间,所以这两个服务端跟客户端可以不对应,需要保证字段对应即可

Asp.net MVC端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace cn.fstudio.hessian.dto
{
    public class ResponseBase<T>
    {
        private int code;
        private string msg;
        private T model;

        public int Code
        {
            get { return code; }
            set { code = value; }
        }
        public string Msg
        {
            get { return msg; }
            set { msg = value; }
        }
        public T Model
        {
            get { return model; }
            set { model = value; }

        }
    }
}
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using cn.fstudio.hessian.dto;
using cn.fstudio.update.model;
using AA.DAO;
using System.Text;
using EmitMapper;
namespace AA.Web.Controllers
{
    public class SoftController : Controller
    {
        //
        // GET: /Soft/
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            var response = new ResponseBase<List<SoftInfo>>();
            try
            {
                using (var ctx = DBCtx.GetCtx())
                {
                   response.Model= ObjectMapperManager.DefaultInstance.GetMapper<List<Base_Soft>,List<SoftInfo>>().Map(ctx.Base_Soft.ToList());
                }
                response.Code = 0;

            }
            catch (Exception ex)
            {
                response.Code = -1;
                response.Msg = ex.Message;
            }
            return Json(response,"text/json",Encoding.UTF8,JsonRequestBehavior.AllowGet );
        }

        public ActionResult GetApp(String id,String v)
        {
            using (var ctx = DBCtx.GetCtx())
            {
                int softId=int.Parse(id);
                var q = ctx.Base_SoftVersion.Where(ent => ent.SoftId == softId);
                if (!String.IsNullOrWhiteSpace(v))
                {
                    q = q.Where(ent => ent.VersionCode == v);
                }

                q = q.OrderByDescending(ent => ent.VersionCode).Take(1);
               
                var it= q.FirstOrDefault();

                if (it == null)
                {
                    throw new Exception("未找到该软件!");
                }
                var soft= ctx.Base_Soft.FirstOrDefault(ent => ent.SoftId == softId);

                return File(Server.MapPath(it.Path), "application/vnd.android", Url.Encode(string.Format("{0}_{1}.apk",soft.FileName,it.VersionCode)));

            }

        }
        public ActionResult AppVers(String id)
        {
            var response = new ResponseBase<List<SoftVersionInfo>>();
            try
            {
                using (var ctx = DBCtx.GetCtx())
                {
                    var list= ctx.ExecuteStoreQuery<SoftVersionInfo>("Select SoftId,RecId,VersionName,VersionCode,AddTime From Base_SoftVersion Where SoftId={0} order by versionCode desc",id).ToList();
                    response.Model = list;
                }
                response.Code = 0;

            }
            catch (Exception ex)
            {
                response.Code = -1;
                response.Msg = ex.Message;
            }
            return Json(response, "text/json", Encoding.UTF8, JsonRequestBehavior.AllowGet);
        }
        public ActionResult AppLastVer(String id)
        {
            var response = new ResponseBase<SoftVersionInfo>();
            try
            {
                using (var ctx = DBCtx.GetCtx())
                {
                    var it = ctx.ExecuteStoreQuery<SoftVersionInfo>("Select Top 1 SoftId,RecId,VersionName,VersionCode,AddTime From Base_SoftVersion Where SoftId={0} order by versionCode desc,RecId desc", id).FirstOrDefault();
                    response.Model = it;
                }
                response.Code = 0;

            }
            catch (Exception ex)
            {
                response.Code = -1;
                response.Msg = ex.Message;
            }
            return Json(response, "text/json", Encoding.UTF8, JsonRequestBehavior.AllowGet);
        }

    }
}
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace cn.fstudio.update.model
{
    public class SoftInfo
    {
        private int softId;
        private string softName;
        private string versionName;
        private string versionCode;
        private DateTime addTime;
        private DateTime lastTime;
        private string memo;
        private int recId;
        private String fileName;

        public String FileName
        {
            get { return fileName; }
            set { fileName = value; }
        }

        /// <summary>
        /// SoftId
        /// </summary>        
        public int SoftId
        {
            get { return softId; }
            set { softId = value; }
        }
        /// <summary>
        /// SoftName
        /// </summary>        
        public string SoftName
        {
            get { return softName; }
            set { softName = value; }
        }
        /// <summary>
        /// VersionName
        /// </summary>        
        public string VersionName
        {
            get { return versionName; }
            set { versionName = value; }
        }
        /// <summary>
        /// VersionCode
        /// </summary>        
        public string VersionCode
        {
            get { return versionCode; }
            set { versionCode = value; }
        }
        /// <summary>
        /// AddTime
        /// </summary>        
        public DateTime AddTime
        {
            get { return addTime; }
            set { addTime = value; }
        }
        /// <summary>
        /// LastTime
        /// </summary>        
        public DateTime LastTime
        {
            get { return lastTime; }
            set { lastTime = value; }
        }
        /// <summary>
        /// Memo
        /// </summary>        
        public string Memo
        {
            get { return memo; }
            set { memo = value; }
        }
        /// <summary>
        /// RecId
        /// </summary>        
        public int RecId
        {
            get { return recId; }
            set { recId = value; }
        }        
    }
}
View Code

android端

package cn.fstudio.update;

import java.lang.reflect.Type;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

public class GsonUtil {


    public static class DateDeserializer implements JsonDeserializer<Date> {

        @Override
        public Date deserialize(JsonElement json, Type typeOfT,
                JsonDeserializationContext context) throws JsonParseException {
            String JSONDateToMilliseconds = "/Date\((.*?)\)/";
            Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
            String value = json.getAsJsonPrimitive().getAsString();
            Matcher matcher = pattern.matcher(value);
            String result = matcher.replaceAll("$1");

            return new Date(new Long(result));
        }
    }
    
    
    public static Gson getGson() {
        GsonBuilder gsonb = new GsonBuilder();
        DateDeserializer ds = new DateDeserializer();
        gsonb.registerTypeAdapter(Date.class, ds);
        gsonb.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);
        Gson gson = gsonb.create();
        return gson;

    }
}
View Code
package cn.fstudio.util;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;

import android.R.string;
import android.util.Log;

public class HttpClientUtil {

    private  static  HttpContext httpContext;
    static {
        // 创建一个本地Cookie存储的实例
        CookieStore cookieStore = new BasicCookieStore();
        // 创建一个本地上下文信息
        httpContext = new BasicHttpContext();
        // 在本地上下问中绑定一个本地存储
        httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

    }
    public static String get(String baseUrl,String path,List<NameValuePair> qparams){
        
        try {
            URI uri=new URI(baseUrl);
            return get(uri.getScheme(), uri.getHost(), uri.getPort(), path, qparams);
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
        }
        
    }
    public static String get(String scheme,String host,int port,String path, List<NameValuePair> qparams){
        URI uri=null;
        try {
            
            if(qparams==null)qparams=new ArrayList<NameValuePair>();
            uri = URIUtils.createURI(scheme, host, port, path, URLEncodedUtils.format(qparams, "UTF-8"), null);
            Log.d("Test", uri.toString());
            return get(uri.toString());
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        
    }
    public static String get(String url){

        try {

            // HttpGet连接对象
            HttpGet httpRequest = new HttpGet(url);
            // 取得HttpClient对象
            HttpClient httpClient = new DefaultHttpClient();
            // 请求HttpClient,取得HttpResponse
            HttpResponse httpResponse = httpClient.execute(httpRequest,httpContext);
//            for (org.apache.http.Header h : httpResponse.getAllHeaders()) {
//                Log.d("Test",h.getName());
//            }
            
            // 请求成功
            int statusCode=httpResponse.getStatusLine().getStatusCode();
            if ( statusCode == HttpStatus.SC_OK) {
                HttpEntity entity=httpResponse.getEntity();
                // 取得返回的字符串
                String strResult = EntityUtils.toString(entity);
                entity.consumeContent();
                ////httpClient.getConnectionManager().shutdown();
                return strResult;
            } 
            throw new RuntimeException("网络请求执行错误,响应码:" +statusCode);
            
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
View Code
package cn.fstudio.update;

import java.io.Serializable;
import java.util.Date;

public class SoftInfo implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private int softId;
    private String softName;
    private String versionName;
    private String versionCode;
    private Date addTime;
    private Date lastTime;
    private String memo;
    private int recId;
    private String fileName;
    public int getSoftId() {
        return softId;
    }
    public void setSoftId(int softId) {
        this.softId = softId;
    }
    public String getSoftName() {
        return softName;
    }
    public void setSoftName(String softName) {
        this.softName = softName;
    }
    public String getVersionName() {
        return versionName;
    }
    public void setVersionName(String versionName) {
        this.versionName = versionName;
    }
    public String getVersionCode() {
        return versionCode;
    }
    public void setVersionCode(String versionCode) {
        this.versionCode = versionCode;
    }
    public Date getAddTime() {
        return addTime;
    }
    public void setAddTime(Date addTime) {
        this.addTime = addTime;
    }
    public Date getLastTime() {
        return lastTime;
    }
    public void setLastTime(Date lastTime) {
        this.lastTime = lastTime;
    }
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    public int getRecId() {
        return recId;
    }
    public void setRecId(int recId) {
        this.recId = recId;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public static long getSerialversionuid() {
        return serialVersionUID;
    }
}
View Code
package cn.fstudio.update;

import java.io.Serializable;

public class ResponseBase<T> implements Serializable{

    private static final long serialVersionUID = 1L;
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public T getModel() {
        return model;
    }
    public void setModel(T model) {
        this.model = model;
    }
    private int code;
    private String msg;
    private T model;
}
View Code
package cn.fstudio.test;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import android.util.Log;
import cn.fstudio.update.GsonUtil;
import cn.fstudio.update.ResponseBase;
import cn.fstudio.update.SoftInfo;

import cn.fstudio.update.SoftVersionInfo;
import cn.fstudio.util.HttpClientUtil;
import junit.framework.TestCase;

public class UpdateTest extends TestCase {
    final String TAG = "Test";

    public void testHttpClient() {
        List<NameValuePair> qparams = new ArrayList<NameValuePair>();
        qparams.add(new BasicNameValuePair("id", "8"));
        String json = HttpClientUtil.get("http", "122.226.151.4", 7086,
                "/soft/AppLastVer", qparams);
        
    Type type =  new TypeToken<ResponseBase<SoftVersionInfo>>(){}.getType();
    Gson gson=GsonUtil.getGson();
    ResponseBase<SoftVersionInfo> response=    gson.fromJson(json, type);
        
        Log.d(TAG, json);
    }

    public void testSoft() {

        String json = HttpClientUtil.get("http", "122.226.151.4", 7086,
                "/soft/", null);
        Gson gson=GsonUtil.getGson();
        
        Type type =  new TypeToken<ResponseBase<List<SoftInfo>>>(){}.getType();
        
        ResponseBase<List<SoftInfo>> response=    gson.fromJson(json, type);
        Log.d(TAG, json);
    }
    public void testAppVers() {
        List<NameValuePair> qparams = new ArrayList<NameValuePair>();
        qparams.add(new BasicNameValuePair("id", "22a"));
        String json = HttpClientUtil.get("http", "122.226.151.4", 7086,
                "/soft/appVers", qparams);
        Gson gson=GsonUtil.getGson();
        
        Type type =  new TypeToken<ResponseBase<List<SoftVersionInfo>>>(){}.getType();
        
        ResponseBase<List<SoftVersionInfo>> response=    gson.fromJson(json, type);
        Log.d(TAG, json);
    }
    public void testAppLastVer() {
        List<NameValuePair> qparams = new ArrayList<NameValuePair>();
        qparams.add(new BasicNameValuePair("id", "8"));
        String json = HttpClientUtil.get("http://122.226.151.4:7086/",
                "/soft/appLastVer", qparams);
        Gson gson=GsonUtil.getGson();
        
        Type type =  new TypeToken<ResponseBase<SoftVersionInfo>>(){}.getType();
        
        ResponseBase<SoftVersionInfo> response=    gson.fromJson(json, type);
        Log.d(TAG, json);
    }
}
View Code
原文地址:https://www.cnblogs.com/wdfrog/p/3328375.html