博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 中类对象与JSON字符串互相转换的几种方法
阅读量:4303 次
发布时间:2019-05-27

本文共 4095 字,大约阅读时间需要 13 分钟。

随着 Rest 风格 API 的应用越来越广泛,对象与JSON字符串互相转换的功能也用的越来越多。这里介绍三种方法,期中两种为DotNet Framework .NET 3.5 及后续版本自带的 DataContractJsonSerializer、 JavaScriptSerializer,另一种为 Newtonsoft.Json.dll ,我选择它的原因是因为它支持 DotNet Framework .NET 2.0。

方法一、DoNet2.0 需要借助于Newtonsoft.Json.dll

我使用的版本是:Version 10.0.3

        // 从一个对象信息生成Json串

        public static string ObjectToJson(object obj)
        {
            return JsonConvert.SerializeObject(obj);
        }
        // 从一个Json串生成对象信息
        public static object JsonToObject(string jsonString, object obj)
        {
            return JsonConvert.DeserializeObject(jsonString, obj.GetType());
        }

方法二、DataContractJsonSerializer
        /// <summary>
        /// Json转换成对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonText"></param>
        /// <returns></returns>
        public static T JsonToObject<T>(string jsonText)
        {
            // Framework 2.0 不支持
            DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText));
            T obj = (T)s.ReadObject(ms);
            ms.Dispose();
            return obj;
 
 
        }
 
 
        /// <summary>
        /// 对象转换成JSON
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ObjectToJSON<T>(T obj)
        {
            // Framework 2.0 不支持
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
            string result = string.Empty;
            using (MemoryStream ms = new MemoryStream())
            {
                serializer.WriteObject(ms, obj);
                ms.Position = 0;
 
                using (StreamReader read = new StreamReader(ms))
                {
                    result = read.ReadToEnd();
                }
            }
            return result;
        }
namespace SL_DataContractJsonSerializer
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }
 
        //This uses an event handler, not SL data binding
        void OnClick(object sender, EventArgs args)
        {
            txtOutput1.Text = "Create a User object and serialize it.";
            string json = WriteFromObject();
            txtOutput2.Text = json.ToString(); // Displays: {"Age":42,"Name":"Bob"}
 
            txtOutput3.Text = "Deserialize the data to a User object.";
            string jsonString = "{'Name':'Bill', 'Age':53}";
            User deserializedUser = ReadToObject(jsonString);
            txtOutput4.Text = deserializedUser.Name; // Displays: Bill
            txtOutput5.Text = deserializedUser.Age.ToString(); // Displays: 53
        }
        // Create a User object and serialize it to a JSON stream.
        public static string WriteFromObject()
        {
            //Create User object.
            User user = new User("Bob", 42);
 
            //Create a stream to serialize the object to.
            MemoryStream ms = new MemoryStream();
 
            // Serializer the User object to the stream.
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
            ser.WriteObject(ms, user);
            byte[] json = ms.ToArray();
            ms.Close();
            return Encoding.UTF8.GetString(json, 0, json.Length);
 
        }
 
        // Deserialize a JSON stream to a User object.
        public static User ReadToObject(string json)
        {
            User deserializedUser = new User();
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
            DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
            deserializedUser = ser.ReadObject(ms) as User;
            ms.Close();
            return deserializedUser;
        }
 
    }
 
    [DataContract]
    public class User
    {
        [DataMember]
        public string Name { get; set; }
 
        [DataMember]
        public int Age { get; set; }
 
        public User() { }
 
        public User(string newName, int newAge)
        {
            Name = newName;
            Age = newAge;
        }
 
    }
 
}

方法三、JavaScriptSerializer
public static void JsonMy(string json)
        {                     
            JavaScriptSerializer js = new JavaScriptSerializer();   //实例化一个能够序列化数据的类
            ToJsonMy list = js.Deserialize<ToJsonMy>(json);    //将json数据转化为对象类型并赋值给list
            string result = list.result;
            string res_info = list.res_info;
            string queryorder_info = list.res_info;
        }
 
        public static void JsonMy4(string json)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();   //实例化一个能够序列化数据的类
            ToJsonMy3 list = js.Deserialize<ToJsonMy3>(json);    //将json数据转化为对象类型并赋值给list
            string result = list.result;
            string res_info = list.res_info;
            string order_num = list.queryorder_info.order_num;
            List<orderdetail> orderdetail = list.queryorder_info.orderdetail;
            string CFTUin = orderdetail[0].CFTUin;
            string HotelName = orderdetail[0].HotelName;
            string ListID = orderdetail[1].ListID;
            string State = orderdetail[2].State;
        }

 

转载地址:http://djlws.baihongyu.com/

你可能感兴趣的文章
Java 内部类种类及使用解析
查看>>
匿名内部类精讲
查看>>
如何在ubuntu下设置永久的alias别名
查看>>
如何安装安装nginx软件--nginx的自动安装
查看>>
ubuntu下编译php扩展的时候报缺少pcre解决办法
查看>>
linux下安装安装pcre configure: error: You need a C++ compiler for C++ support
查看>>
ubuntu下nginx的安装教程(过程可能有点不同)
查看>>
nginx+php(fastcgi)安装教程
查看>>
linux命令(1):wget命令
查看>>
linux命令(2):gzip命令
查看>>
Linux命令(3)打Patch的方法
查看>>
linux命令(4)curl命令详解
查看>>
Apache与Nginx的优缺点比较
查看>>
Ubuntu中安装zlib
查看>>
configure: error: C++ compiler cannot create executables
查看>>
linux命令(5)Ubuntu apt-get安装卸载命令
查看>>
如何安装nginx软件---手动安装
查看>>
配置php-fpm和nginx教程
查看>>
nginx基本配置与参数说明---nginx的学习之路
查看>>
什么是nginx---nginx的学习之路
查看>>