zoukankan      html  css  js  c++  java
  • .net 实体类与json转换(.net自带类库实现)

    注意要点。

    1.jsonhelp编写时候添加的引用。System.Runtime.Serialization.Json;

    2.实体类需声明为public

    jsonhelp代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.Serialization.Json;
    using System.IO;
    namespace JsonTest
    {
        class JsonHelp
        {
            public JsonHelp()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        /// <summary>
        /// 把对象序列化 JSON 字符串 
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="obj">对象实体</param>
        /// <returns>JSON字符串</returns>
        public static string GetJson<T>(T obj)
        {
            //记住 添加引用 System.ServiceModel.Web 
            /**
             * 如果不添加上面的引用,System.Runtime.Serialization.Json; Json是出不来的哦
             * */
            DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(T));
            using (MemoryStream ms = new MemoryStream())
            {
                json.WriteObject(ms, obj);
                string szJson = Encoding.UTF8.GetString(ms.ToArray());
                return szJson;
            }
        }
        /// <summary>
        /// 把JSON字符串还原为对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="szJson">JSON字符串</param>
        /// <returns>对象实体</returns>
        public static T ParseFormJson<T>(string szJson)
        {
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream (Encoding.UTF8.GetBytes(szJson)))
            {
                DataContractJsonSerializer dcj = new DataContractJsonSerializer(typeof(T));
                return (T)dcj.ReadObject(ms);
            }
        }
    
        }
    }
    

     实体类代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace JsonTest
    {
      public  class testData
        {
            public testData()
        {
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        }
    }
    

     控制台应用程序测试代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace JsonTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                //实体类转json
                testData t1 = new testData();
                t1.Id = 1;
                t1.Name = "001姓名";
                t1.Sex = "男";
                testData t2 = new testData();
                t2.Id = 2;
                t2.Name = "002姓名";
                t2.Sex = "男";
                testData t3 = new testData();
                t3.Id = 3;
                t3.Name = "003姓名";
                t3.Sex = "男";
                List<testData> tlist = new List<testData>();
                tlist.Add(t1);
                tlist.Add(t2);
                tlist.Add(t3);
             Console.WriteLine(JsonHelp.GetJson<List<testData>>(tlist));
            // Console.ReadKey();
               //json转实体类
    
             List<testData> tl = JsonHelp.ParseFormJson <List<testData>>(JsonHelp.GetJson<List<testData>>(tlist));
             Console.WriteLine(tl.Count);
             Console.WriteLine(tl[0].Name);
             Console.ReadKey();
    
            }
        }
    }
    

     在查找资料过程中参考了一下同学的博文

    http://www.cnblogs.com/jinho/archive/2010/04/18/1715044.html

    http://blog.csdn.net/wang_cel/article/details/44587201

  • 相关阅读:
    全排列算法的全面解析
    排序算法系列:插入排序算法
    MySQL多表查询核心优化
    Python代码优化及技巧笔记(二)
    深入理解Lambda
    Unity游戏逻辑服务器实践
    Java设计模式——迭代器模式
    Java设计模式——原型模式
    insert 加的锁
    区间锁
  • 原文地址:https://www.cnblogs.com/kim-meng/p/5654976.html
Copyright © 2011-2022 走看看