zoukankan      html  css  js  c++  java
  • .NET json格式 使用Newtonsoft.Json.JsonConvert类 附读取文件方法

    来自:http://kb.cnblogs.com/page/94471/

    为了便于下面的演示,下面提供一个类的代码:

    [DataContract]
    publicclass User
    {
    ///<summary>
    /// 编号
    ///</summary>
    [DataMember]
    publicint UserId { get; set; }
    ///<summary>
    /// 用户名
    ///</summary>
    [DataMember]
    publicstring UserName { get; set; }
    ///<summary>
    /// 创建时间
    ///</summary>
    [DataMember]
    [JsonConverter(typeof(IsoDateTimeConverter))]
    public DateTime CreateDate { get; set; }
    ///<summary>
    /// 生日
    ///</summary>
    [DataMember]
    [JsonConverter(typeof(JavaScriptDateTimeConverter))]
    public DateTime Birthday { get; set; }
    ///<summary>
    /// 相关URL
    ///</summary>
    [DataMember]
    public List<string> Urls { get; set; }
    ///<summary>
    /// 薪水
    ///</summary>
    //[ScriptIgnore]//使用JavaScriptSerializer序列化时不序列化此字段
    //[IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段
    //[JsonIgnore]//使用JsonConvert序列化时不序列化此字段
    publicint Salary { get; set; }
    ///<summary>
    /// 权利级别
    ///</summary>
    [DataMember]
    public Priority Priority { get; set; }
    
    public User()
    {
    Urls =new List<string>();
    }
    }
    ///<summary>
    /// 权利级别
    ///</summary>
    publicenum Priority:byte
    {
    Lowest=0x1,
    BelowNormal=0x2,
    Normal=0x4,
    AboveNormal=0x8,
    Highest=0x16
    }

    使用Newtonsoft.Json.JsonConvert类
      Newtonsoft.Json.JsonConvert类是非微软提供的一个JSON序列化和反序列的开源免费的类库(下载网址是:http://www.codeplex.com/json/),它提供了更灵活的序列化和反序列化控制,并且如果你的开发环境使用的是.NET Framework3.5及以后版本的话,你就可以使用Linq to JSON,这样一来面对一大段的数据不必一一解析,你可以使用Linq to JSON解析出你关心的那部分即可,非常方便。
      下面是使用Newtonsoft.Json.JsonConvert类的例子:

    publicstaticvoid JsonConvertDemo()
    {
    User user =new User { UserId =1, UserName ="李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.BelowNormal, Salary =5000 };
    //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用
    //JSON序列化
    string result = JsonConvert.SerializeObject(user);
    Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length);
    //JSON反序列化
    user = JsonConvert.DeserializeObject<User>(result);
    Console.WriteLine("使用JsonConvert反序列化后的结果:UserId:{0},UserName: {1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);
    }
    
    publicstaticvoid JsonConvertLinqDemo()
    {
    User user =new User { UserId =1, UserName ="周公", CreateDate = DateTime.Now.AddYears(-8), Birthday = DateTime.Now.AddYears(-32), Priority = Priority.Lowest, Salary =500, Urls =new List<string> { "http://zhoufoxcn.blog.51cto.com", "http://blog.csdn.net/zhoufoxcn" } };
    //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用
    //JSON序列化
    string result = JsonConvert.SerializeObject(user);
    Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length);
    //使用Linq to JSON
    JObject jobject = JObject.Parse(result);
    JToken token = jobject["Urls"];
    List<string> urlList =new List<string>();
    foreach (JToken t in token)
    {
    urlList.Add(t.ToString());
    }
    Console.Write("使用Linq to JSON反序列化后的结果:[");
    for (int i =0; i < urlList.Count -1;i++ )
    {
    Console.Write(urlList[i] +",");
    }
    Console.WriteLine(urlList[urlList.Count -1] +"]");
    }
    1. 使用JsonConvert序列化后的结果:{"UserId":1,"UserName":"李刚","CreateDate":"1981-03-16T00:20:12.1875+08:00","Birthday":new Date(-277630787812),"Urls":[],"Priority":2},长度:132  
    2. 使用JsonConvert反序列化后的结果:UserId:1,UserName:李刚,CreateDate:1981-3-16 0:20:12,Priority:BelowNormal  
    3. 使用JsonConvert序列化后的结果:{"UserId":1,"UserName":"周公","CreateDate":"2003-03-16T00:20:12.40625+08:00","Birthday":new Date(290362812406),"Urls":["http://zhoufoxcn.blog.51cto.com","http://blog.csdn.net/zhoufoxcn"],"Priority":1},长度:198  
    4. 使用Linq to JSON反序列化后的结果:["http://zhoufoxcn.blog.51cto.com","http://blog.csdn.net/zhoufoxcn"] 

    json文件

    {
    "Location":"香格里拉",
    "ActivityDatetime":"2013-11-20 18:00:00",
    }

     StreamReader sr = new StreamReader(jsonFileName, Encoding.Default);
                string str1 = sr.ReadToEnd();
    
                //反序列化测试对象
               JsonHelper jsonHelper = new JsonHelper();
                jsonHelper =JsonConvert.DeserializeObject<JsonHelper>(str1);
  • 相关阅读:
    Mirco2440核心板设计思考
    linux 第一次获得root权限
    MakeFile 文件详解
    windows下编辑过的文件在Linux下用vi打开行尾会多出一个^M符号
    linux信息查找
    ubuntu不能正常使用make menuconfig的解决方案
    Linux 解压/压缩操作命令
    Linux 文件/文件夹操作命令
    Linux内核开发基础
    计算文件夹的大小
  • 原文地址:https://www.cnblogs.com/bkycjj/p/3386060.html
Copyright © 2011-2022 走看看