首页 技术 正文
技术 2022年11月14日
0 收藏 356 点赞 3,796 浏览 3907 个字

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

 public string ScriptSerialize<T>(T t)
{ JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(t); } public T ScriptDeserialize<T>(string strJson)
{ JavaScriptSerializer js = new JavaScriptSerializer(); return js.Deserialize<T>(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
    {

/// <summary>
        /// Json序列化
        /// </summary>
        /// <typeparam name=”T”>对象类型</typeparam>
        /// <param name=”t”>序列化对象</param>
        /// <returns></returns>
        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();
            string p = @”https://api.weibo.com/2/place/nearby_timeline.json?lat=39.91611756877837&long=116.38559999999804&range=11132&access_token=2.00QekzUDNVJpcE9536073d7a8o11IB&page=1&count=50&endtime=1371799367&starttime=1371795767

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

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

  String json="{\"list\":[{\"bookName\":\"数学\",\"sType\":\"理科\"},{\"bookName\":\"物理\",\"sType\":\"理科\"}],\"person\":{\"age\":10,\"name\":\"刘宇\"}}";         PersonBooks pBooks = new PersonBooks();
List<Book> list=new ArrayList<Book>(); 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<Book> list = null;
public List<Book> getList() {
return list;
}
public void setList(List<Book> list) {
this.list = list;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
private Person person=null;}

第二种就是直接以字符串的方式不断的解析(这个是处理https://api.weibo.com/2/place/nearby_timeline.json?lat=39.91611756877837&long=116.38559999999804&range=11132&access_token=2.00QekzUDNVJpcE9536073d7a8o11IB&page=1&count=50&endtime=1371799367&starttime=1371795767

 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序列化的方法,不知道是否有兴趣尝试下呢?

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,119
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,591
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,436
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,207
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,843
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,928