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; } }
}
}
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 = ; }
catch (Exception ex)
{
response.Code = -;
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(); 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 = ; }
catch (Exception ex)
{
response.Code = -;
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 = ; }
catch (Exception ex)
{
response.Code = -;
response.Msg = ex.Message;
}
return Json(response, "text/json", Encoding.UTF8, JsonRequestBehavior.AllowGet);
} }
}
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; }
}
}
}

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; }
}
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);
}
}
}
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;
}
}
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;
}
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", ""));
String json = HttpClientUtil.get("http", "122.226.151.4", ,
"/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", ,
"/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", ,
"/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", ""));
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);
}
}

Android Gson 操作的更多相关文章

  1. Android 常用操作

    0.android studios使用介绍 使用介绍 android studio 常用小技巧 网址 1.怎么样添加第三方库 方法一: 第一步:将第三方库以module的形式导入 第二步:选中要导入第 ...

  2. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  3. Android – 学习操作NFC – 2

    在<Android – 学习操作NFC – 1>说明了Android在处理NFC tag的机制.tag dispatch system的运作流程,以及三种ACTION_NDEF_DISCO ...

  4. JSON和GSON操作json数据

    1,JSON操作json import net.sf.json.JSONArray; import net.sf.json.JSONObject; //json操作数据 public static S ...

  5. 【转】Android Gson的使用

    Android Gson 2014 年 05 月 22 日 android 目前的客户端大都有和服务端进行交互,而数据的格式基本就是json了,于是在Android开发中就经常用到json解析,方便的 ...

  6. android 文件操作类简易总结

    android 文件操作类(参考链接) http://www.cnblogs.com/menlsh/archive/2013/04/02/2997084.html package com.androi ...

  7. 为什么说android UI操作不是线程安全的

    转载于:http://blog.csdn.net/lvxiangan/article/details/17218409#t2 UI线程及Android的单线程模型原则 使用Worker线程 Commu ...

  8. Android权限操作之uses-permission详解

    本文实例讲述了Android权限操作之uses-permission.分享给大家供大家参考,具体如下: 我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android ...

  9. Java操作JSON数据(2)--Gson操作JSON数据

    Gson是Google公司发布的一个开发源码的Java库,可用于将Java对象转换为JSON字符串,也可用于将JSON字符串转换为对应的Java对象.本介绍下Gson的基本使用方法,包括序列化和反序列 ...

随机推荐

  1. LeetCode OJ - Best Time to Buy and Sell Stock

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xiezhihua120/article/details/32939749 Say you have ...

  2. mysql_use_result的使用

    对于每个可以产生一个结果集的命令(比如select.show.describe, explain, check_table等等),发起mysql_query或者mysql_real_query之后,你 ...

  3. 【转】MFC消息处理(一)

    原文网址:http://blog.csdn.net/hyhnoproblem/article/details/6182120 1.MFC窗口如何与AfxWndProc建立联系. 当一个新的CWnd派生 ...

  4. C#使用OpcNetApi.dll和OpcNetApi.Com.dll操作OPC

    本人学习了一下.Net,恰好,51自学网,又要用这个.而网上很多VC6,VB6,VB .Net的但,很少C#的.现在研究一下,给出例子: 测试平台,是VS2008,KEPServer,OpcNetAp ...

  5. PYTHON 常用API ***

    1.类型判断 data = b'' data = bytes() print (type(data)) #<class 'bytes'> isinstance(123,int) if ty ...

  6. Java 将指定字符串连接到此字符串的结尾 concat()

    Java 手册 concat public String concat(String str) 将指定字符串连接到此字符串的结尾. 如果参数字符串的长度为 0,则返回此 String 对象.否则,创建 ...

  7. HDU 2199 Can you solve this equation?(二分精度)

    HDU 2199 Can you solve this equation?     Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == ...

  8. [转][ASP.net]后台页面刷新

    三种后台刷新页面的方法: // 刷新方法一 Response.AddHeader("); // 刷新方法二 Response.Write("<script language= ...

  9. Zookeeper客户端 CuratorFramework使用

    CuratorFramework使用 跟着实例学习ZooKeeper的用法: Curator框架应用 ZooKeeper客户端Curator使用一 创建连接

  10. sql之强制索引

    1.今天我遇到一个问题,在处理百万级数据查询的时候,一般查询会很慢. 2.第一时间想到是建立联合索引,但是数据库存在多条索引的情况下,索引的执行是全部执行. 3.所以这里要按照特定的索引执行,就必须使 ...