JAVA与C#关于JSON序列化的比较

JAVA CODE:

import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
  
import com.json.domain.Person;  
  
public class JsonService {  
  
    public JsonService() {  
    }  
      
    public Person getPerson(){  
        Person person = new Person(1001,"jack","上海黄浦区");  
        return person;  
    }  
    public List<Person> getListPerson(){  
        List<Person> list = new ArrayList<Person>();  
        Person person1 = new Person(1001,"jack","上海黄浦区");  
        Person person2 = new Person(1002,"rose","上海闵行区");  
        Person person3 = new Person(1003,"mick","上海黄浦区");  
        list.add(person1);  
        list.add(person2);  
        list.add(person3);  
        return list;  
    }  
      
    public List<String> getListString(){  
        List<String> list = new ArrayList<String>();  
        list.add("北京");  
        list.add("上海");  
        list.add("湖南");  
        return list;  
    }  
      
    public List<Map<String,Object>> getListMaps(){  
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  
        Map<String,Object> map1 = new HashMap<String, Object>();  
        Map<String,Object> map2 = new HashMap<String, Object>();  
        map1.put("id", 1001);  
        map1.put("name", "jack");  
        map1.put("address", "北京");  
        map2.put("id", 1001);  
        map2.put("name", "rose");  
        map2.put("address", "上海");  
        list.add(map1);  
        list.add(map2);  
        return list;  
    }  
}

经过如下的JSON序列化后:

import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.Iterator;  
import java.util.List;  
import java.util.Map;  
  
import org.json.JSONArray;  
import org.json.JSONException;  
import org.json.JSONObject;  
import com.json.bean.Person;  
  
/**  
 * 完成对JSON数据的解析  
 * @author wulianghuan  
 *  
 */  
public class JsonTools {  
  
    public JsonTools() {  
          
    }  
      
     public static String createjsonString (String key,  Object value)  {
         JSONObjcet jsonObject=new JSONObject();
         jsonObject.put(key, value);
         return jsonObject.toString();
     )

    /**  
     * 获取对象数据  
     * @param key  
     * @param jsonString  
     * @return  
     */  
    public static Person getPerson(String key,String jsonString){  
        Person person = new Person();  
        try {  
            JSONObject jsonObject = new JSONObject(jsonString);  
            JSONObject personObject = jsonObject.getJSONObject(key);  
            person.setId(personObject.getInt("id"));  
            person.setName(personObject.getString("name"));  
            person.setAddress(personObject.getString("address"));  
        } catch (JSONException e) {  
            e.printStackTrace();  
        }  
        return person;  
    }  
      
    /**  
     * 获取对象数组数据  
     * @param key  
     * @param jsonString  
     * @return  
     */  
    public static List<Person> getPersons(String key,String jsonString){  
        List<Person> list = new ArrayList<Person>();  
        try {  
            JSONObject jsonObject = new JSONObject(jsonString);  
            //返回json的数组  
            JSONArray jsonArray = jsonObject.getJSONArray(key);  
            for(int i=0;i<jsonArray.length();i++){  
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);  
                Person person = new Person();  
                person.setId(jsonObject2.getInt("id"));  
                person.setName(jsonObject2.getString("name"));  
                person.setAddress(jsonObject2.getString("address"));  
                list.add(person);  
            }  
        } catch (JSONException e) {  
            e.printStackTrace();  
        }  
          
        return list;  
    }  
    /**  
     * 获取String数组数据  
     * @param key  
     * @param jsonString  
     * @return  
     */  
    public static List<String> getList(String key,String jsonString){  
        List<String> list = new ArrayList<String>();  
        try {  
            JSONObject jsonObject = new JSONObject(jsonString);  
            JSONArray jsonArray = jsonObject.getJSONArray(key);  
            for(int i=0;i<jsonArray.length();i++){  
                String msg = jsonArray.getString(i);  
                list.add(msg);  
            }  
        } catch (JSONException e) {  
            e.printStackTrace();  
        }  
        return list;  
    }  
    /**  
     * 获取对象的Map集合数据  
     * @param key  
     * @param jsonString  
     * @return  
     */  
    public static List<Map<String,Object>> getListMap(String key,String jsonString){  
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  
        try {  
            JSONObject jsonObject = new JSONObject(jsonString);  
            JSONArray jsonArray = jsonObject.getJSONArray(key);  
            for(int i=0;i<jsonArray.length();i++){  
                JSONObject jsonObject2 = jsonArray.getJSONObject(i);  
                Map<String,Object> map = new HashMap<String, Object>();  
                Iterator<String> iterator = jsonObject2.keys();  
                while(iterator.hasNext()){  
                    String json_key = iterator.next();  
                    Object json_value = jsonObject2.get(json_key);  
                    if(json_value==null){  
                        json_value = "";  
                    }  
                    map.put(json_key, json_value);  
                }  
                list.add(map);  
            }  
        } catch (JSONException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
        return list;  
    }  
}

Serlet:

import java.io.IOException;  
import java.io.PrintWriter;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import com.json.service.JsonService;  
import com.json.tools.JsonTools;  
  
public class JsonServlet extends HttpServlet {  
    private JsonService service;  
    /**  
     * Constructor of the object.  
     */  
    public JsonServlet() {  
        super();  
    }  
  
    /**  
     * Destruction of the servlet. <br>  
     */  
    public void destroy() {  
        super.destroy(); // Just puts "destroy" string in log  
        // Put your code here  
    }  
  
    /**  
     * The doGet method of the servlet. <br>  
     *  
     * This method is called when a form has its tag value method equals to get.  
     *   
     * @param request the request send by the client to the server  
     * @param response the response send by the server to the client  
     * @throws ServletException if an error occurred  
     * @throws IOException if an error occurred  
     */  
    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        this.doPost(request, response);  
    }  
  
    /**  
     * The doPost method of the servlet. <br>  
     *  
     * This method is called when a form has its tag value method equals to post.  
     *   
     * @param request the request send by the client to the server  
     * @param response the response send by the server to the client  
     * @throws ServletException if an error occurred  
     * @throws IOException if an error occurred  
     */  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        response.setContentType("text/html;charset=utf-8");  
        request.setCharacterEncoding("utf-8");  
        response.setCharacterEncoding("utf-8");  
        PrintWriter out = response.getWriter();  
          
        String jsonString = "";  
        String action_flag = request.getParameter("action_flag");  
        if(action_flag.equals("person")){  
            jsonString = JsonTools.createJsonString("person", service.getPerson());  
        }else if(action_flag.equals("persons")){  
            jsonString = JsonTools.createJsonString("persons", service.getListPerson());  
        }else if(action_flag.equals("listString")){  
            jsonString = JsonTools.createJsonString("listString", service.getListString());  
        }else if(action_flag.equals("listMap")){  
            jsonString = JsonTools.createJsonString("listMap", service.getListMaps());  
        }  
        out.println(jsonString);  
        out.flush();  
        out.close();  
    }  
  
    /**  
     * Initialization of the servlet. <br>  
     *  
     * @throws ServletException if an error occurs  
     */  
    public void init() throws ServletException {  
        service = new JsonService();  
    }  
  
}

每个方法返回的JSONSTR如下:

getPerson():

{"persons":{"address":"上海黄浦区","id":1001,"name":"jack"}}

getListPerson():

{"persons":[{"address":"上海黄浦区","id":1001,"name":"jack"},{"addrss":"上海闵行区","id":1002,"name":"rose"},{"address":"上海黄浦区","id":1003,"name":"mick"}]}

getListString():

{"persons":["北京","上海","湖南"]}

getListMap():

{"persons":[{"id":1001,"address":"北京","name":"jack"},{"id":1001,"address":"上海","name":"rose"}]}

而在.Net中对比如下:

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

namespace NetJSON
{
    public partial class JSON : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string flag = Request["action_flag"];
            string jsonStr = "";
            switch (flag)
            {
                case "person":
                    var p = new Person();
                    p.Id = 100;
                    p.Name = "张三";
                    p.Address = "北京朝阳";
                    jsonStr = JsonHelper.JsonSerializer<Person>(p);
                    break;
                case "persons":
                    List<Person> persons = new List<Person>();
                    persons.Add(new Person
                    {
                        Id = 101,
                        Name = "李四",
                        Address = "北京昌平"
                    });
                    persons.Add(new Person
                    {
                        Id = 102,
                        Name = "王五",
                        Address = "北京顺义"
                    });
                    persons.Add(new Person
                    {
                        Id = 103,
                        Name = "赵六",
                        Address = "天津南开"
                    });
                    jsonStr = JsonHelper.JsonSerializer<List<Person>>(persons);
                    break;
                case "stringList":
                    List<string> strs = new List<string>();
                    strs.Add("china");
                    strs.Add("beijing");
                    strs.Add("chaoyang");
                    jsonStr = JsonHelper.JsonSerializer<List<string>>(strs);
                    break;
                case "listMap":
                    List<Hashtable> listMap = new List<Hashtable>();
                    Hashtable ht = new Hashtable();
                    ht.Add("Id", 203);
                    ht.Add("Name", "老赵");
                    ht.Add("Age", 36);
                    listMap.Add(ht);
                    ht = new Hashtable();
                    ht.Add("Id", 204);
                    ht.Add("Name", "老张");
                    ht.Add("Age", 46);
                    ht.Add("Married", true);
                    listMap.Add(ht);

                    List<SortedDictionary<string, object>> list = new List<SortedDictionary<string, object>>();
                    SortedDictionary<string, object> dict = new SortedDictionary<string, object>();
                    dict.Add("Id", 334);
                    dict.Add("Name", "XYZ");
                    list.Add(dict);
                    dict = new SortedDictionary<string, object>();
                    dict.Add("Id", 334);
                    dict.Add("Address", "XYZ");
                    dict.Add("Married", false);
                    list.Add(dict);
                    jsonStr = JsonHelper.JsonSerializer<List<SortedDictionary<string, object>>>(list);
                    break;
            }
            Response.Write(jsonStr);
            Response.End();
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
    }
}
JSON序列化代码:

using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;

namespace NetJSON
{
    /// <summary>
    /// JSON序列化和反序列化辅助类
    /// </summary>
    public class JsonHelper
    {
        /// <summary>
        /// JSON序列化
        /// </summary>
        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();
            return jsonString;
        }

        /// <summary>
        /// JSON反序列化
        /// </summary>
        public static T JsonDeserialize<T>(string jsonString)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            T obj = (T)ser.ReadObject(ms);
            return obj;
        }
    }
}

person:

{"Address":"北京朝阳","Id":100,"Name":"张三"}

persons:

[{"Address":"北京昌平","Id":101,"Name":"李四"},{"Address":"北京顺义","Id":102,"Name":"王五"},{"Address":"天津南开","Id":103,"Name":"赵六"}]

stringList:

["china","beijing","chaoyang"]

listMap:

[[{"Key":"Id","Value":201},{"Key":"Name","Value":"老赵"}],[{"Key":"Id","Value":203},{"Key":"Birthday","Value":"/Date(232214400000+0800)/"},{"Key":"Married","Value":true}]]

注意其中.Net中Hashtable或者Dictionary返回的字符串与Java的不同。

原文地址:https://www.cnblogs.com/AndyGe/p/3433398.html