当前位置: 代码网 > it编程>编程语言>Javascript > C#中对象与JSON字符串互相转换的三种方式

C#中对象与JSON字符串互相转换的三种方式

2024年05月18日 Javascript 我要评论
json(javascriptobject notation, js 对象标记) 是一种轻量级的数据交换格式。关于内存对象和json字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种

json(javascriptobject notation, js 对象标记) 是一种轻量级的数据交换格式。

关于内存对象和json字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种方法来解决此问题

分别是使用newtonsoft.json.dlldatacontractjsonserializerjavascriptserializer

方法一:newtonsoft.json.dll

newtonsoft.json.dll在.net2.0之后的版本可以支持 我的版本.net framework4.0

添加newtonsoft.json的引用

对象与json字符串转换类设计

    class jsonnewtonsoft
    {
        /// <summary>
        /// 把对象转换为json字符串
        /// </summary>
        /// <param name="o">对象</param>
        /// <returns>json字符串</returns>
        public static string tojson(this object o)
        {
            if (o == null)
            {
                return null;
            }
            return jsonconvert.serializeobject(o);
        }
        /// <summary>
        /// 把json文本转为实体
        /// </summary>
        /// <typeparam name="t"></typeparam>
        /// <param name="input"></param>
        /// <returns></returns>
        public static t fromjson<t>(this string input)
        {
            try
            {
                return jsonconvert.deserializeobject<t>(input);
            }
            catch (exception ex)
            {
                return default(t);
            }
        }
    }

方法二:datacontractjsonserializer

使用这种 需要引用system.runtime.serialization.dll

类设计

    class jsondatacontractjsonserializer
    {
        /// <summary>
        /// 内存对象转换为json字符串
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string objecttojson(object obj)
        {
           datacontractjsonserializer serializer = new datacontractjsonserializer(obj.gettype());
           memorystream stream = new memorystream();
           serializer.writeobject(stream, obj);
           byte[] databytes = new byte[stream.length];
           stream.position = 0;
           stream.read(databytes, 0, (int)stream.length);
           return encoding.utf8.getstring(databytes);
        }
       /// <summary>
       /// json字符串转内存对象
       /// </summary>
       /// <param name="jsonstring"></param>
       /// <param name="obj"></param>
       /// <returns></returns>
        public static object jsontoobject(string jsonstring, object obj)
        {
           datacontractjsonserializer serializer = new datacontractjsonserializer(obj.gettype());
           memorystream mstream = new memorystream(encoding.utf8.getbytes(jsonstring));
           return serializer.readobject(mstream);
        }
    }

方法三:javascriptserializer

需要引用:system.web.extensions.dll

类设计

    public static class jsonjavascriptserializer
    {
        /// <summary>
        /// 内存对象转换为json字符串
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string tojson(object obj)
        {
            stringbuilder sb = new stringbuilder();
            javascriptserializer json = new javascriptserializer();
            json.serialize(obj, sb);
            return sb.tostring();
        }
        /// <summary>
        /// json字符串转内存对象
        /// </summary>
        /// <param name="jsonstring"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static t fromjson<t>(string jsonstring)
        {
            javascriptserializer json = new javascriptserializer();
            return json.deserialize<t>(jsonstring);
        }

    }

程序测试:

新建一个测试对象类student.cs

    public enum sex
    {
        男=0,
        女=1
    }
    [serializable()]
    class student
    {
        private string _name;

        public string name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _age;

        public int age
        {
            get { return _age; }
            set { _age = value; }
        }

        private sex _sex = sex.男;

        public sex sex
        {
            get { return _sex; }
            set { _sex = value; }
        }
        public student()
        { }
        public student(string name,int age,sex sex)
        {
            this._name = name;
            this._age = age;
            this._sex = sex;
        }
    }

测试程序

        static void main(string[] args)
        {
            student st = new student("笨男孩",22,sex.男);

            console.writeline("============方法一============================================");
            //方法一

            console.writeline("方法一对象转json字符串");
            string jsonstr = jsonnewtonsoft.tojson(st);
            console.writeline(jsonstr);
            console.writeline("方法一json字符串转对象");
            student stobj = (student)jsonnewtonsoft.fromjson<student>(jsonstr);
            console.writeline("姓名:{0} 年龄:{1} 性别:{2}",stobj.name,stobj.age,stobj.sex);


            console.writeline("============方法二============================================");
            //方法二
            console.writeline("方法二对象转json字符串");
            string jsonstr2 = jsondatacontractjsonserializer.tojson(st);
            console.writeline(jsonstr2);
            console.writeline("方法二json字符串转对象");
            student stobj2 = (student)jsondatacontractjsonserializer.fromjson(jsonstr2, st);
            console.writeline("姓名:{0} 年龄:{1} 性别:{2}", stobj2.name, stobj2.age, stobj2.sex);


            console.writeline("============方法三============================================");
            //方法二
            console.writeline("方法三对象转json字符串");
            string jsonstr3 = jsonjavascriptserializer.tojson(st);
            console.writeline(jsonstr3);
            console.writeline("方法三json字符串转对象");
            student stobj3 = (student)jsonjavascriptserializer.fromjson<student>(jsonstr3);
            console.writeline("姓名:{0} 年龄:{1} 性别:{2}", stobj3.name, stobj3.age, stobj3.sex);

            console.readkey();
        }

程序运行结果:

运行结果:

性能对比:

综上所述,一般采用json.net方法一比较好!

参考:

javascriptserializer类介绍:https://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx

datacontractjsonserializer类介绍:https://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.json.datacontractjsonserializer(v=vs.110).aspx

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对代码网的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com