在C#中序列化是比较容易的,如果不用第三方的类库,那么C#提供的两个对象也够我们使用,一般的操作是定义一个不含有方法的类,这个类里面定义了要序列化的对象的属性,因为我C#用的比较多,这里直接给出泛型,第一个是我写的,第二个是Copy的:

public string ScriptSerialize(T t)

{

JavaScriptSerializer js = new JavaScriptSerializer();

return js.Serialize(t);

}

public T ScriptDeserialize(string strJson)

{

JavaScriptSerializer js = new JavaScriptSerializer();

return js.Deserialize(strJson);

}

}

using System;

using System.Collections.Generic;

using System.Web;

using System.Runtime.Serialization.Json;

using System.Linq;

using System.Text;

using System.IO;

using System.Text.RegularExpressions;

namespace JsonHelper

{

public class JsonClass

{

///

/// Json序列化

///

/// 对象类型

/// 序列化对象

///

public static string JsonSerializer(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();

MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);

Regex reg = new Regex(p);

jsonString = reg.Replace(jsonString, matchEvaluator);

return jsonString;

}

///

/// Json反序列化

///

/// 对象类型

/// 反序列化json字符串

///

public static T JsonDeserialize(string jsonString)

{

string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";

MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);

Regex reg = new Regex(p);

jsonString = reg.Replace(jsonString, matchEvaluator);

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

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

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

return obj;

}

private static string ConvertJsonDateToDateString(Match m)

{

string result = string.Empty;

DateTime dt = new DateTime(1970, 1, 1);

dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));

dt = dt.ToLocalTime();

result = dt.ToString("yyyy-MM-dd HH:mm:ss");

return result;

}

private static string ConvertDateStringToJsonDate(Match m)

{

string result = string.Empty;

DateTime dt = DateTime.Parse(m.Groups[0].Value);

dt = dt.ToUniversalTime();

TimeSpan ts = dt - DateTime.Parse("1970-01-01");

result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);

return result;

}

}

}

因为没怎么用过Java,考虑到http(

请求后数据格式的处理,必须解析请求之后的json格式,按照思路,网上找一个json的jar包,然后解析,因为不熟悉,所以碰壁,对这个jar包也不了解,在网上看了下用法,自己也摸索了下,可以采取两种方式

采用javabean的方式定义对象,这其实就是要将JSON的结构了解清楚,然后按照结构去定义,这里我给出示例(这个示例是为了说明,不是按照上面的http请求结果组成的):

String json="{\"list\":[{\"bookName\":\"数学\",\"sType\":\"理科\"},{\"bookName\":\"物理\",\"sType\":\"理科\"}],\"person\":{\"age\":10,\"name\":\"刘宇\"}}";

PersonBooks pBooks = new PersonBooks();

List list=new ArrayList();

Book b1 = new Book();

b1.setBookName("数学");

b1.setsType("理科");

Book b2 = new Book();

b2.setBookName("物理");

b2.setsType("理科");

list.add(b1);

list.add(b2);

Map map = new HashMap();

Person p1 = new Person();

p1.setAge(10);

p1.setName("刘宇");

pBooks.setPerson(p1);

pBooks.setList(list);

JSONObject jsonPersonBooks=JSONObject.fromObject(json);

PersonBooks pPersonBooks=(PersonBooks)JSONObject.toBean(jsonPersonBooks, PersonBooks.class);

System.out.println(pPersonBooks.getPerson().getAge());

System.out.println(pPersonBooks.getPerson().getName());

下面是三个类的定义

public class Book {

String sType;

String BookName;

public String getsType() {

return sType;

}

public void setsType(String sType) {

this.sType = sType;

}

public String getBookName() {

return BookName;

}

public void setBookName(String bookName) {

BookName = bookName;

}

}

public class Person {

String Name;

public String getName() {

return Name;

}

public void setName(String name) {

Name = name;

}

int age;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

public class PersonBooks {

private List list = null;

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

private Person person=null;

}

JSONObject jsonobject = JSONObject.fromObject(sb.toString());

JSONArray jarr=JSONArray.fromObject(jsonobject.get("statuses"));

for(Object jeach : jarr)在这里一个个的解析,可以构造一个bean对象解析,和C#类比,举一反三

{

JSONObject jo=(JSONObject)jeach;

JSONObject geo=JSONObject.fromObject( jo.get("geo"));

JSONArray jCoord=JSONArray.fromObject(geo.get("coordinates"));

//"geo":{"type":"Point","coordinates":[39.90813,116.30328]}

Iterator iter = jCoord.iterator();

System.out.println("打印坐标:");

while(iter.hasNext()){

String str = iter.next().toString();

System.out.println(str);

}

其实就像我在以前的日志中说的一样,世间万事万物都具有相似性,就好比C#和Java,一定要学会这种灵活运用的思维,举一反三,在一个新的东西中看到一些方法名,属性名,就应该才猜到是干什么的,同时要学会联想,结合已经有的知识去判断,比如tag,比如label这样的东西,要不然在两个相似的东西上面花费重复的时间,太不值得了!

一个东西的实现可能有多种实现手段,但是其本质,其原理都是一样的,学东西,不仅仅要知道如何去做,更应该了解为什么这样,虽然后者我们可能都不清楚,但是也起码应该知道其处理流程,只要思路正确,那就是如何去实现的问题,看来还需要牢记!

上面介绍的是json的序列化,如果是XML的序列化呢?类比可以知道,也可以通过定义类,然后采用C#提供的XML序列化的方法,不知道是否有兴趣尝试下呢?

json 序列化 java_Java JSON序列化杂谈相关推荐

  1. json map java_Java:JSON和Map相互转换

    Java:JSON与Map相互转换 需要jar包:jackson-core-2.6.0.jar,jackson-databind-2.6.0.jar,jackson-annotations-2.6.0 ...

  2. php 序列化 java_JAVA之序列化

    1.问题: 如果想往一个文件中写入一个对象,发现字节流,字符流都不能满足要求, 如何向一个文件中写入对象? 使用字节字符流,都必须要将对象转为字节/字符,再写到文件中,可以字节字符流没有将对象转为字节 ...

  3. 序列化模块--json模块--pickle模块-shelve模块

    什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传播到远程,因为硬盘或网络传输时只能接受bytes 例: 把内存数据 转成字符 # data ={# 'roles ...

  4. Python基础23_os,sys,序列化,pickle,json

    一. os 模块 所有关于操作系统的内容都在os模块     os.makedirs("d:/1PY/新建文件夹/宝宝")      # 可生成多层递归目录     os.remo ...

  5. 解决Python自带的json序列化工具不能序列化datetime类型数据问题

    解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...

  6. Java序列化闲聊:序列化和Json

    前言 其实我挺纠结的,在纠结到底要不要写这个模块的博客,因为序列化这个模块说简单,按照一些人的说法,其实也就是调两个函数的事情,说困难,铺开就让人感觉范围很广. 序列化 什么是序列化,我们在编程的时候 ...

  7. python序列化模块json和pickle

    序列化相关 1. json 应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转 ...

  8. 【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )

    文章目录 一.JSON 序列化工具 二.JSON 手动序列化 三.根据 JSON 编写 Dart 模型类 四.在线自动转换 五.相关资源 一.JSON 序列化工具 JSON 格式比较简单的话 , 使用 ...

  9. java rest 序列化_http请求/restful/序列化反序列化/JSON

    1.为什么要实现Serializable (1)将内存中的对象数据存在磁盘中持久化 (2)将对象从一个应用程序发送到另一个应用程序 实现Serializable接口可以把对象序列化为字节流,实现传输必 ...

最新文章

  1. 使用git更新github上的开源项目
  2. 详解六大伤硬盘软件及解决方法
  3. 2!=5 or 0在python中是否正确-python中的if判断语句
  4. 机器学习-集成学习-提升树-LightGBM
  5. 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...
  6. CLR via C#学习笔记-第十章-无参属性
  7. nginx实现共享以及实现原理
  8. FreeMarker 模板引擎快速入门 与 生成Word文档终极解决方案
  9. 802.1x客户端 linux,Gentoo Linux--校园网(802.1x)拨号认证客户端解决方案
  10. v9更新系统后为何显示服务器连接,红伞V9升级不能……报告里说好多文件无法与服务器建立连接……...
  11. ARM中国上演夺权互撕大战:抢公章、互发声明、董事长兼CEO“被罢免”
  12. CLRC663学习笔记
  13. (美国)数字设备公司 DEC
  14. java find symbol,cannot find symbol
  15. 我的大学十年 -- 林锐
  16. SNF快速开发平台成长史V4.5-Spring.Net.Framework-SNF软件开发机器人
  17. Python 爬虫之 Beautifulsoup4,爬网站图片
  18. 深度学习细颗粒图像分析综述
  19. libxml2剖析(3):使用教程
  20. 隐藏应用计算机器的密码,隐私计算器:将你的密码隐藏在一个工作的计算器中...

热门文章

  1. 操作系统原理 : 非连续的内存分配,分段,页表
  2. Qt程序怎么在别人的电脑上运行
  3. nextpolish安装_「三代组装」使用Pilon对基因组进行polish
  4. arm优化编译参数选项解释
  5. linux ar 命令详解
  6. 启明智显分享| 2.4寸旋钮串口屏在健身器材上的应用
  7. github高级搜索技巧_【建议收藏】百度 quot;隐藏quot; 的高级搜索技巧
  8. 文章采集伪原创工具_卓尔博通|如何把伪原创文章变成原创
  9. maccms V10后门
  10. Android Studio的配置问题——Intel HAXM is required to run this AVD,VT-x is disabled in BIOS;