zoukankan      html  css  js  c++  java
  • c#数据的序列化和反序列化(推荐版)

    一段时间没有写东西了,不是因为俺懒,也不是因为俺忙,是因为俺上不了网....

    今天项目中用到了数据的序列化和反序列化,数据用的是EF自动生成的代码,开始用的.net 自带的DataContractJsonSerializer进行序列化和反序列化,当代码写完以后,调试,我X(原谅我的脏话,因为确实让我生气),实体因为有[DataContractAttribute(IsReference=true  )] 这样一个属性,提示不能序列化,当然手改一下啦,改完以后,提示基类EntityObject 的这个属性不可以

    MY God!!

    后来也是因为DataContractJsonSerializer 反序列化成集合的时候不好使,所以才下定决心废弃。采用了第三方的东西:传说中的Json.net

    今天我也是要说这个组件序列化和反序列化的功能:

    废话少说,线上model ,作为提供数据的使用

    public  class wf_Task_Inbox
        {        
            public wf_Task_Inbox(string id,string name)
            {
                this.ID = id;
                this.Name = name;
            }
            [DataMember ]
            public string ID { get; set; }
            [DataMember]
            public string Name{get ;set ;}
             
        }
    
     

    这里主要是作为测试时的数据源

    接下来是序列化的代码,为了对比清楚,先奉上.net 自带的方法:

     /// <summary>
            /// 把一个对象转化为json格式数据
            /// </summary>
            /// <param name="entity"></param>
            /// <returns></returns>
            public   string EntityToJson(wf_Task_Inbox entity)
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(entity.GetType());
                using (MemoryStream stream = new MemoryStream())
                {
                    serializer.WriteObject(stream, entity);                
                    return Encoding.UTF8.GetString(stream .ToArray ());
                }
    
            }
    

    返回的是个字符串,集合序列化的方法类似;

    下边是json.net的代码:

    JsonConvert .SerializeObject  (list, Formatting.None  ); 有且只有一行!!!!当然首先得添加json.net的引用

    接下是反序列化的代码,.net 自带:

    /// <summary>
    /// 将json 数据转化为对象
    /// </summary>
    /// <param name="entity"></param>
    /// <param name="jsonstring"></param>
    /// <returns></returns>
    public wf_Task_Inbox JsonToEntity(string jsonstring)
    {
    DataContractJsonSerializer serializer
    = new DataContractJsonSerializer(typeof(wf_Task_Inbox));
    using (MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonstring)))
    {
    return serializer.ReadObject(mStream) as wf_Task_Inbox;
    }
    }

    同时也是因为自带的木有泛型的扩展,所以不太喜欢,json.net的方法:

    JsonConvert.DeserializeObject<List<wf_Task_Inbox>>(jsonstring) ; 这个是集合的,当然单个对象的怎么弄,你懂的,去掉《T》 就行了呗....

    生成的序列化数据是标准的json格式:

    [{"ID":"0","Name":"姓名:0"},{"ID":"1","Name":"姓名:1"},{"ID":"2","Name":"姓名:2"},{"ID":"3","Name":"姓名:3"},{"ID":"4","Name":"姓名:4"},{"ID":"5","Name":"姓名:5"},{"ID":"6","Name":"姓名:6"},{"ID":"7","Name":"姓名:7"},{"ID":"8","Name":"姓名:8"},{"ID":"9","Name":"姓名:9"}]

    最后附上json.net的下载地址,下载包里有帮助和各个版本的json.net

    http://json.codeplex.com/Release/ProjectReleases.aspx

     

    希望对大家有帮助,大菜敬上!!

  • 相关阅读:
    git 账号密码
    sql server 备份
    计算经纬度的两点之间的距离
    redis 安装
    webapi 可空参数
    Asp.Net MVC4 使用Unity 实现依赖注入
    sublime主题推荐
    分解质数因子
    如何在sublime+chrome中调试php代码?
    php的mysql语句里变量加不加单引号问题
  • 原文地址:https://www.cnblogs.com/zhanlang/p/2016214.html
Copyright © 2011-2022 走看看