• 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的不同。

  • 相关阅读:
    最全前端开发书籍整理推荐
    一个命令搞定MP4文件转m3u8文件
    Git基本使用方法
    How to write class diagram
    OpenSSL Installation On Windows
    单点登录(Single Sign On)解决方案
    利用 jQuery 克隆对象
    java中自定义一个异常类 在某些情况抛出自定的异常 ----------阻断程序
    Java 如何抛出异常、自定义异常
    flowable流程启动时监听器
  • 原文地址:https://www.cnblogs.com/AndyGe/p/3433398.html
Copyright © 2020-2023  润新知