Json的序列化与反序列化以及乱入的k_BackingField

今天需要使用Json数据,所以用到了Json的序列化与反序列化。首先先来说怎么序列化的:

1.序列化与反序列化

  首先添加System.Runtime.Serialization的引用

Object转换成Json文件:

      public static string ObjectToJson(object obj)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());
            using (MemoryStream ms = new MemoryStream())
            {
                ser.WriteObject(ms, obj);
                return Encoding.Default.GetString(ms.ToArray());
            }
        }

Json数据转换成Object 

    public static T JsonToObject<T>(string json) where T : class
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            using (MemoryStream ms = new MemoryStream(Encoding.Default.GetBytes(json)))
            {
                return (T)ser.ReadObject(ms);
            }
        }

程序比较简单我就不多说了,刚开始实体类是这样的:

  [Serializable]
    class User
    {
        public int Age { get; set; }
        public string Name { get; set; }

        public User(string name, int age)
        {
            Age = age;
            Name = name;
        }
    }

然后调用:

    static void Main(string[] args)
        {
            var user1 = new User("zhangsan", 18);
            var users = new List<User> { user1, new User("lisi", 23 ) };
            var strUser1 = ObjectToJson(user1);
            var setUsers = ObjectToJson(users);
        }

加入断点,查看json数据,

居然莫名其妙出现了乱入的k__BackingField

2.乱入的k__BackingField的解决方案

  从网上找了好多资料也没搞明白是为啥会出现这个问题。想了解的可以参考下这个。不过找到了解决方案,这里记录下:

只需要将实体类改成如下形式:

  [DataContract]
    class User
    {
        [DataMember]
        public int Age { get; set; }
        [DataMember]
        public string Name { get; set; }

        public User(string name, int age)
        {
            Age = age;
            Name = name;
        }
    }

再监视下就不会出现k__BackingField。Json数据转换成实体的调用也很简单:

static void Main(string[] args)
        {
            var user1 = new User("zhangsan", 18);
            var users = new List<User> { user1, new User("lisi", 23 ) };
            var strUser1 = ObjectToJson(user1);
            var strUsers = ObjectToJson(users);

            var user11 = JsonToObject<User>(strUser1);
            var users1 = JsonToObject<List<User>>(strUsers);
        }

时间: 2024-10-13 11:41:11

Json的序列化与反序列化以及乱入的k_BackingField的相关文章

Json的序列化与反序列化

想想某一天,你在看LOL攻略的时候,系统突然崩溃了,接着浏览器出现了密密麻麻的LOL帐号和密码,你一定在想:"天啊,这次要发财了,说不定里面有超凡号或者王者号,我得赶紧全部记下来."然而说完你就惊呆了,那么多的帐号密码,而且全部写在了Json里面,一个一个复制粘贴要记到什么时候啊...如果这时候我在你身边,我一定会帮助你的,前提是,要分几个王者号给我噢...  言归正传. 上面举的例子虽然有点不太现实,但其实是想和大家说明一个问题,如果要解析Json或XML,请不要使用检索字符串的方式

Newtonsoft.Json 的序列化与反序列化

转自:http://www.cnblogs.com/08shiyan/p/3464028.html 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一个DataTable对象,如下: DataTable dt = new DataTable(); DataColumn dcName = new DataColumn("Name"); Da

Json.Net序列化和反序列化设置

首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一个DataTable对象,如下: DataTable dt = new DataTable(); DataColumn dcName = new DataColumn("Name"); DataColumn dcAge = new DataColumn("Age");

ASP.NET 中JSON 的序列化和反序列化

JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理. 一.JSON简介: JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号''{}'

ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化

首先,先简单的谈一下什么是序列化与反序列化,序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化(Deserialization)对象的状态,重新创建该对象. 一般我们把Json的序列化与反序列化用在哪些地方呢?对于网站开发来说,一般我们会用Json来进行前台和后台的数据传递(常与Ajax一起使用),而这个过程就涉及到了Json的序列化与反序列化. 那么我们就来简单看

JAVA与JSON的序列化、反序列化

package com.linkage.app.memcache; import java.util.HashMap;import java.util.Map.Entry; import net.sf.ezmorph.Morpher;import net.sf.ezmorph.MorpherRegistry;import net.sf.ezmorph.bean.BeanMorpher;import net.sf.json.JSONObject;import net.sf.json.util.JS

ASP.NET中JSON的序列化和反序列化

ASP.NET中JSON的序列化和反序列化 JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理.     一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化

[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化 本节导读: 介绍JSON的结构,在JS中的使用.重点说明JSON如何在.NET中快带序列化和反序列化.最后介绍在使用.NET序列化JSON过程中的注意事项. 读前必备: A.泛型       [.net 面向对象编程基础]  (18) 泛型 B.LINQ使用  [.net 面向对象编程基础] (20) LINQ使用 1. 关于JSON JSON的全称是”JavaScrip

Asp.Net中JSON的序列化和反序列化-----JavaScriptSerializer ,加上自己工作心得

在工作中和手机通信用到web服务和javascriptSerializer,返回json数据,供手机端调用,一开始返回的数据是一大堆,比如 [{"word_picture9":"http://boss.xbxw.net/Upload/word/guojia/p_yinggelan.jpg","word_picture8":"http://boss.xbxw.net/Upload/word/guojia/p_zhongguo.jpg&qu