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. html模拟组织架构横向展开

    近期看到不少人有相似的需求.实现组织架构的横向展开,显示.无聊就做了一下.先看下终于的效果图 兼容各大主流浏览器,而且支持IE6.7,8,不同的是排除标签圆角效果外,资源文件:文件下载地址 主流浏览器 ...

  2. 关于Android应用开发的一些安全注意事项

    原文地址: http://www.javacodegeeks.com/2014/05/simple-tips-to-secure-android-app.html                   ...

  3. Python编程核心内容 ---- 切片、迭代和列表生成式

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 最近太忙啦.很多事情需要自己处理,感觉时间不够用啊~~~~今后,博客更新时间可能会慢下来(但不能荒废了学习,要学习就 ...

  4. Servlet技术基础

    由于Servlet部分涉及较多的类,要想尽快掌握Servlet基础,必须熟悉使用这些类之间的关系以及其常用的方法. 主要讲解部分包括: 1)通过实现Servelt接口来编写Servlet 2)熟悉Se ...

  5. ProcessHelp 进程类(启动,杀掉,查找)

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  6. 【翻译】HTML5开发——轻量级Web Database存储库html5sql.js

    方式1: html5sql官方网址:http://html5sql.com/ 阅读之前,先看W3C关于WEB Database的一段话: Beware. This specification is n ...

  7. 智能家居入门DIY——【七、添加一个LCD12864吧】

    今天加了一个LCD12864,IC看说明上是ST7567,结果一顿U8g2,发现两个问题: 1.买的时候不知道是卖家写的我理解错了还是怎么了,反正是不出汉字的. 2.U8g2太大了…………占了uno的 ...

  8. 黄聪:Windows 64位系统中安装Android SDK“系统找不到指定的文件Java.exe”解决方法

    明明已经在64位window7中安装好了64位版本的jdk,为什么android SDK安装程序却识别不到jdk呢?先看看报错: Java SE Development Kit (JDK) not f ...

  9. <转--大话session>

    大话Session 原文地址:http://www.cnblogs.com/shoru/archive/2010/02/19/1669395.html 结语 到这里,读者应该对session有了更多的 ...

  10. Java 简单UDP通信

    Java手册 java.net Class DatagramSocket java.lang.Object java.net.DatagramSocket All Implemented Interf ...