45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:使用Json.net的心得介绍

使用Json.net的心得介绍

2016-08-14 07:14:18 来源:www.45fan.com 【

使用Json.net的心得介绍

Json.net 常用使用小结(推荐)

using System;
using System.Linq;
using System.Collections.Generic;

namespace microstore
{
 public interface IPerson
 {
  string FirstName
  {
   get;
   set;
  }
  string LastName
  {
   get;
   set;
  }
  DateTime BirthDate
  {
   get;
   set;
  }
 }
 public class Employee : IPerson
 {
  public string FirstName
  {
   get;
   set;
  }
  public string LastName
  {
   get;
   set;
  }
  public DateTime BirthDate
  {
   get;
   set;
  }

  public string Department
  {
   get;
   set;
  }
  public string JobTitle
  {
   get;
   set;
  }
 }
 public class PersonConverter : Newtonsoft.Json.Converters.CustomCreationConverter<IPerson>
 {
  //重写abstract class CustomCreationConverter<T>的Create方法
  public override IPerson Create(Type objectType)
  {
   return new Employee();
  }
 }

 public partial class testjson : System.Web.UI.Page
 {
  protected void Page_Load(object sender, EventArgs e)
  {
   //if (!IsPostBack)
   // TestJson();
  }

  #region 序列化
  public string TestJsonSerialize()
  {
   Product product = new Product();
   product.Name = "Apple";
   product.Expiry = DateTime.Now.AddDays(3).ToString("yyyy-MM-dd hh:mm:ss");
   product.Price = 3.99M;
   //product.Sizes = new string[] { "Small", "Medium", "Large" };

   //string json = Newtonsoft.Json.JsonConvert.SerializeObject(product); //没有缩进输出
   string json = Newtonsoft.Json.JsonConvert.SerializeObject(product, Newtonsoft.Json.Formatting.Indented);
   //string json = Newtonsoft.Json.JsonConvert.SerializeObject(
   // product, 
   // Newtonsoft.Json.Formatting.Indented,
   // new Newtonsoft.Json.JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore }
   //);
   return string.Format("<p>{0}</p>", json);
  }
  public string TestListJsonSerialize()
  {
   Product product = new Product();
   product.Name = "Apple";
   product.Expiry = DateTime.Now.AddDays(3).ToString("yyyy-MM-dd hh:mm:ss");
   product.Price = 3.99M;
   product.Sizes = new string[] { "Small", "Medium", "Large" };

   List<Product> plist = new List<Product>();
   plist.Add(product);
   plist.Add(product);
   string json = Newtonsoft.Json.JsonConvert.SerializeObject(plist, Newtonsoft.Json.Formatting.Indented);
   return string.Format("<p>{0}</p>", json);
  }
  #endregion

  #region 反序列化
  public string TestJsonDeserialize()
  {
   string strjson = "{\"Name\":\"Apple\",\"Expiry\":\"2014-05-03 10:20:59\",\"Price\":3.99,\"Sizes\":[\"Small\",\"Medium\",\"Large\"]}";
   Product p = Newtonsoft.Json.JsonConvert.DeserializeObject<Product>(strjson);

   string template = @"<p><ul>
         <li>{0}</li>
         <li>{1}</li>
         <li>{2}</li>
         <li>{3}</li>
        </ul></p>";

   return string.Format(template, p.Name, p.Expiry, p.Price.ToString(), string.Join(",", p.Sizes));
  }
  public string TestListJsonDeserialize()
  {
   string strjson = "{\"Name\":\"Apple\",\"Expiry\":\"2014-05-03 10:20:59\",\"Price\":3.99,\"Sizes\":[\"Small\",\"Medium\",\"Large\"]}";
   List<Product> plist = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Product>>(string.Format("[{0},{1}]", strjson, strjson));

   string template = @"<p><ul>
         <li>{0}</li>
         <li>{1}</li>
         <li>{2}</li>
         <li>{3}</li>
        </ul></p>";

   System.Text.StringBuilder strb = new System.Text.StringBuilder();
   plist.ForEach(x =>
    strb.AppendLine(
     string.Format(template, x.Name, x.Expiry, x.Price.ToString(), string.Join(",", x.Sizes))
    )
   );
   return strb.ToString();
  }
  #endregion

  #region 自定义反序列化
  public string TestListCustomDeserialize()
  {
   string strJson = "[ { \"FirstName\": \"Maurice\", \"LastName\": \"Moss\", \"BirthDate\": \"1981-03-08T00:00Z\", \"Department\": \"IT\", \"JobTitle\": \"Support\" }, { \"FirstName\": \"Jen\", \"LastName\": \"Barber\", \"BirthDate\": \"1985-12-10T00:00Z\", \"Department\": \"IT\", \"JobTitle\": \"Manager\" } ] ";
   List<IPerson> people = Newtonsoft.Json.JsonConvert.DeserializeObject<List<IPerson>>(strJson, new PersonConverter());
   IPerson person = people[0];

   string template = @"<p><ul>
         <li>当前List<IPerson>[x]对象类型:{0}</li>
         <li>FirstName:{1}</li>
         <li>LastName:{2}</li>
         <li>BirthDate:{3}</li>
         <li>Department:{4}</li>
         <li>JobTitle:{5}</li>
        </ul></p>";

   System.Text.StringBuilder strb = new System.Text.StringBuilder();
   people.ForEach(x =>
    strb.AppendLine(
     string.Format(
      template,
      person.GetType().ToString(),
      x.FirstName,
      x.LastName,
      x.BirthDate.ToString(),
      ((Employee)x).Department,
      ((Employee)x).JobTitle
     )
    )
   );
   return strb.ToString();
  }
  #endregion

  #region 反序列化成Dictionary

  public string TestDeserialize2Dic()
  {
   //string json = @"{""key1"":""zhangsan"",""key2"":""lisi""}";
   //string json = "{\"key1\":\"zhangsan\",\"key2\":\"lisi\"}";
   string json = "{key1:\"zhangsan\",key2:\"lisi\"}";
   Dictionary<string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

   string template = @"<li>key:{0},value:{1}</li>";
   System.Text.StringBuilder strb = new System.Text.StringBuilder();
   strb.Append("Dictionary<string, string>长度" + dic.Count.ToString() + "<ul>");
   dic.AsQueryable().ToList().ForEach(x =>
   {
    strb.AppendLine(string.Format(template, x.Key, x.Value));
   });
   strb.Append("</ul>");
   return strb.ToString();
  }

  #endregion

  #region NullValueHandling特性
  public class Movie
  {
   public string Name { get; set; }
   public string Description { get; set; }
   public string Classification { get; set; }
   public string Studio { get; set; }
   public DateTime? ReleaseDate { get; set; }
   public List<string> ReleaseCountries { get; set; }
  }
  /// <summary>
  /// 完整序列化输出
  /// </summary>
  public string CommonSerialize()
  {
   Movie movie = new Movie();
   movie.Name = "Bad Boys III";
   movie.Description = "It's no Bad Boys";

   string included = Newtonsoft.Json.JsonConvert.SerializeObject(
    movie,
    Newtonsoft.Json.Formatting.Indented, //缩进
    new Newtonsoft.Json.JsonSerializerSettings { }
   );

   return included;
  }
  /// <summary>
  /// 忽略空(Null)对象输出
  /// </summary>
  /// <returns></returns>
  public string IgnoredSerialize()
  {
   Movie movie = new Movie();
   movie.Name = "Bad Boys III";
   movie.Description = "It's no Bad Boys";

   string included = Newtonsoft.Json.JsonConvert.SerializeObject(
    movie,
    Newtonsoft.Json.Formatting.Indented, //缩进
    new Newtonsoft.Json.JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore }
   );

   return included;
  }
  #endregion

  public class Product
  {
   public string Name { get; set; }
   public string Expiry { get; set; }
   public Decimal Price { get; set; }
   public string[] Sizes { get; set; }
  }

  #region DefaultValueHandling默认值
  public class Invoice
  {
   public string Company { get; set; }
   public decimal Amount { get; set; }

   // false is default value of bool
   public bool Paid { get; set; }
   // null is default value of nullable
   public DateTime? PaidDate { get; set; }

   // customize default values
   [System.ComponentModel.DefaultValue(30)]
   public int FollowUpDays { get; set; }

   [System.ComponentModel.DefaultValue("")]
   public string FollowUpEmailAddress { get; set; }
  }
  public void GG()
  {
   Invoice invoice = new Invoice
   {
    Company = "Acme Ltd.",
    Amount = 50.0m,
    Paid = false,
    FollowUpDays = 30,
    FollowUpEmailAddress = string.Empty,
    PaidDate = null
   };

   string included = Newtonsoft.Json.JsonConvert.SerializeObject(
    invoice,
    Newtonsoft.Json.Formatting.Indented,
    new Newtonsoft.Json.JsonSerializerSettings { }
   );
   // {
   // "Company": "Acme Ltd.",
   // "Amount": 50.0,
   // "Paid": false,
   // "PaidDate": null,
   // "FollowUpDays": 30,
   // "FollowUpEmailAddress": ""
   // }

   string ignored = Newtonsoft.Json.JsonConvert.SerializeObject(
    invoice,
    Newtonsoft.Json.Formatting.Indented,
    new Newtonsoft.Json.JsonSerializerSettings { DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore }
   );
   // {
   // "Company": "Acme Ltd.",
   // "Amount": 50.0
   // }
  }
  #endregion

  #region JsonIgnoreAttribute and DataMemberAttribute 特性

  public string OutIncluded()
  {
   Car car = new Car
   {
    Model = "zhangsan",
    Year = DateTime.Now,
    Features = new List<string> { "aaaa", "bbbb", "cccc" },
    LastModified = DateTime.Now.AddDays(5)
   };
   return Newtonsoft.Json.JsonConvert.SerializeObject(car, Newtonsoft.Json.Formatting.Indented);
  }
  public string OutIncluded2()
  {
   Computer com = new Computer
   {
    Name = "zhangsan",
    SalePrice = 3999m,
    Manufacture = "red",
    StockCount = 5,
    WholeSalePrice = 34m,
    NextShipmentDate = DateTime.Now.AddDays(5)
   };
   return Newtonsoft.Json.JsonConvert.SerializeObject(com, Newtonsoft.Json.Formatting.Indented);
  }

  public class Car
  {
   // included in JSON
   public string Model { get; set; }
   public DateTime Year { get; set; }
   public List<string> Features { get; set; }

   // ignored
   [Newtonsoft.Json.JsonIgnore]
   public DateTime LastModified { get; set; }
  }

  //在nt3.5中需要添加System.Runtime.Serialization.dll引用
  [System.Runtime.Serialization.DataContract]
  public class Computer
  {
   // included in JSON
   [System.Runtime.Serialization.DataMember]
   public string Name { get; set; }
   [System.Runtime.Serialization.DataMember]
   public decimal SalePrice { get; set; }

   // ignored
   public string Manufacture { get; set; }
   public int StockCount { get; set; }
   public decimal WholeSalePrice { get; set; }
   public DateTime NextShipmentDate { get; set; }
  }

  #endregion

  #region IContractResolver特性
  public class Book
  {
   public string BookName { get; set; }
   public decimal BookPrice { get; set; }
   public string AuthorName { get; set; }
   public int AuthorAge { get; set; }
   public string AuthorCountry { get; set; }
  }
  public void KK()
  {
   Book book = new Book
   {
    BookName = "The Gathering Storm",
    BookPrice = 16.19m,
    AuthorName = "Brandon Sanderson",
    AuthorAge = 34,
    AuthorCountry = "United States of America"
   };
   string startingWithA = Newtonsoft.Json.JsonConvert.SerializeObject(
    book, Newtonsoft.Json.Formatting.Indented,
    new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new DynamicContractResolver('A') }
   );
   // {
   // "AuthorName": "Brandon Sanderson",
   // "AuthorAge": 34,
   // "AuthorCountry": "United States of America"
   // }

   string startingWithB = Newtonsoft.Json.JsonConvert.SerializeObject(
    book,
    Newtonsoft.Json.Formatting.Indented,
    new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new DynamicContractResolver('B') }
   );
   // {
   // "BookName": "The Gathering Storm",
   // "BookPrice": 16.19
   // }
  }
  public class DynamicContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
  {
   private readonly char _startingWithChar;

   public DynamicContractResolver(char startingWithChar)
   {
    _startingWithChar = startingWithChar;
   }

   protected override IList<Newtonsoft.Json.Serialization.JsonProperty> CreateProperties(Type type, Newtonsoft.Json.MemberSerialization memberSerialization)
   {
    IList<Newtonsoft.Json.Serialization.JsonProperty> properties = base.CreateProperties(type, memberSerialization);

    // only serializer properties that start with the specified character
    properties =
     properties.Where(p => p.PropertyName.StartsWith(_startingWithChar.ToString())).ToList();

    return properties;
   }
  }

  #endregion

  //...
 }
}

  #region Serializing Partial JSON Fragment Example
  public class SearchResult
  {
   public string Title { get; set; }
   public string Content { get; set; }
   public string Url { get; set; }
  }

  public string SerializingJsonFragment()
  {
   #region
   string googleSearchText = @"{
    'responseData': {
     'results': [{
      'GsearchResultClass': 'GwebSearch',
      'unescapedUrl': 'http://en.wikipedia.org/wiki/Paris_Hilton',
      'url': 'http://en.wikipedia.org/wiki/Paris_Hilton',
      'visibleUrl': 'en.wikipedia.org',
      'cacheUrl': 'http://www.google.com/search?q=cache:TwrPfhd22hYJ:en.wikipedia.org',
      'title': '<b>Paris Hilton</b> - Wikipedia, the free encyclopedia',
      'titleNoFormatting': 'Paris Hilton - Wikipedia, the free encyclopedia',
      'content': '[1] In 2006, she released her debut album...'
     },
     {
      'GsearchResultClass': 'GwebSearch',
      'unescapedUrl': 'http://www.imdb.com/name/nm0385296/',
      'url': 'http://www.imdb.com/name/nm0385296/',
      'visibleUrl': 'www.imdb.com',
      'cacheUrl': 'http://www.google.com/search?q=cache:1i34KkqnsooJ:www.imdb.com',
      'title': '<b>Paris Hilton</b>',
      'titleNoFormatting': 'Paris Hilton',
      'content': 'Self: Zoolander. Socialite <b>Paris Hilton</b>...'
     }],
     'cursor': {
      'pages': [{
       'start': '0',
       'label': 1
      },
      {
       'start': '4',
       'label': 2
      },
      {
       'start': '8',
       'label': 3
      },
      {
       'start': '12',
       'label': 4
      }],
      'estimatedResultCount': '59600000',
      'currentPageIndex': 0,
      'moreResultsUrl': 'http://www.google.com/search?oe=utf8&ie=utf8...'
     }
    },
    'responseDetails': null,
    'responseStatus': 200
   }";
   #endregion

   Newtonsoft.Json.Linq.JObject googleSearch = Newtonsoft.Json.Linq.JObject.Parse(googleSearchText);
   // get JSON result objects into a list
   List<Newtonsoft.Json.Linq.JToken> listJToken = googleSearch["responseData"]["results"].Children().ToList();
   System.Text.StringBuilder strb = new System.Text.StringBuilder();
   string template = @"<ul>
         <li>Title:{0}</li>
         <li>Content: {1}</li>
         <li>Url:{2}</li>
        </ul>";
   listJToken.ForEach(x =>
   {
    // serialize JSON results into .NET objects
    SearchResult searchResult = Newtonsoft.Json.JsonConvert.DeserializeObject<SearchResult>(x.ToString());
    strb.AppendLine(string.Format(template, searchResult.Title, searchResult.Content, searchResult.Url));
   });
   return strb.ToString();
  }

  #endregion

  #region ShouldSerialize
  public class CC
  {
   public string Name { get; set; }
   public CC Manager { get; set; }

   //http://msdn.microsoft.com/en-us/library/53b8022e.aspx
   public bool ShouldSerializeManager()
   {
    // don't serialize the Manager property if an employee is their own manager
    return (Manager != this);
   }
  }
  public string ShouldSerializeTest()
  {
   //create Employee mike
   CC mike = new CC();
   mike.Name = "Mike Manager";

   //create Employee joe
   CC joe = new CC();
   joe.Name = "Joe Employee";
   joe.Manager = mike; //set joe'Manager = mike

   // mike is his own manager
   // ShouldSerialize will skip this property
   mike.Manager = mike;
   return Newtonsoft.Json.JsonConvert.SerializeObject(new[] { joe, mike }, Newtonsoft.Json.Formatting.Indented);
  }
  #endregion

  //驼峰结构输出(小写打头,后面单词大写)
  public string JJJ()
  {
   Product product = new Product
   {
    Name = "Widget",
    Expiry = DateTime.Now.ToString(),
    Price = 9.99m,
    Sizes = new[] { "Small", "Medium", "Large" }
   };

   string json = Newtonsoft.Json.JsonConvert.SerializeObject(
    product,
    Newtonsoft.Json.Formatting.Indented,
    new Newtonsoft.Json.JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }
   );
   return json;

   //{
   // "name": "Widget",
   // "expiryDate": "2010-12-20T18:01Z",
   // "price": 9.99,
   // "sizes": [
   // "Small",
   // "Medium",
   // "Large"
   // ]
   //}
  }

  #region ITraceWriter
  public class Staff
  {
   public string Name { get; set; }
   public List<string> Roles { get; set; }
   public DateTime StartDate { get; set; }
  }
  public void KKKK()
  {
   Staff staff = new Staff();
   staff.Name = "Arnie Admin";
   staff.Roles = new List<string> { "Administrator" };
   staff.StartDate = new DateTime(2000, 12, 12, 12, 12, 12, DateTimeKind.Utc);

   Newtonsoft.Json.Serialization.ITraceWriter traceWriter = new Newtonsoft.Json.Serialization.MemoryTraceWriter();
   Newtonsoft.Json.JsonConvert.SerializeObject(
    staff,
    new Newtonsoft.Json.JsonSerializerSettings
    {
     TraceWriter = traceWriter,
     Converters = { new Newtonsoft.Json.Converters.JavaScriptDateTimeConverter() }
    }
   );

   Console.WriteLine(traceWriter);
   // 2012-11-11T12:08:42.761 Info Started serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
   // 2012-11-11T12:08:42.785 Info Started serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
   // 2012-11-11T12:08:42.791 Info Finished serializing System.DateTime with converter Newtonsoft.Json.Converters.JavaScriptDateTimeConverter. Path 'StartDate'.
   // 2012-11-11T12:08:42.797 Info Started serializing System.Collections.Generic.List`1[System.String]. Path 'Roles'.
   // 2012-11-11T12:08:42.798 Info Finished serializing System.Collections.Generic.List`1[System.String]. Path 'Roles'.
   // 2012-11-11T12:08:42.799 Info Finished serializing Newtonsoft.Json.Tests.Serialization.Staff. Path ''.
   // 2013-05-18T21:38:11.255 Verbose Serialized JSON: 
   // {
   // "Name": "Arnie Admin",
   // "StartDate": new Date(
   //  976623132000
   // ),
   // "Roles": [
   //  "Administrator"
   // ]
   // }
  }
  #endregion

  public string TestReadJsonFromFile()
  {
   Linq2Json l2j = new Linq2Json();
   Newtonsoft.Json.Linq.JObject jarray = l2j.GetJObject4();
   return jarray.ToString();
  }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace microstore
{
 public class Linq2Json
 {
  #region GetJObject

  //Parsing a JSON Object from text 
  public Newtonsoft.Json.Linq.JObject GetJObject()
  {
   string json = @"{
        CPU: 'Intel',
        Drives: [
        'DVD read/writer',
        '500 gigabyte hard drive'
        ]
       }";
   Newtonsoft.Json.Linq.JObject jobject = Newtonsoft.Json.Linq.JObject.Parse(json);
   return jobject;
  }

  /* 
   * //example:=>
   * 
   Linq2Json l2j = new Linq2Json();
   Newtonsoft.Json.Linq.JObject jobject = l2j.GetJObject2(Server.MapPath("json/Person.json"));
   //return Newtonsoft.Json.JsonConvert.SerializeObject(jobject, Newtonsoft.Json.Formatting.Indented);
   return jobject.ToString();
   */
  //Loading JSON from a file
  public Newtonsoft.Json.Linq.JObject GetJObject2(string jsonPath)
  {
   using (System.IO.StreamReader reader = System.IO.File.OpenText(jsonPath))
   {
    Newtonsoft.Json.Linq.JObject jobject = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.Linq.JToken.ReadFrom(new Newtonsoft.Json.JsonTextReader(reader));
    return jobject;
   }
  }

  //Creating JObject
  public Newtonsoft.Json.Linq.JObject GetJObject3()
  {
   List<Post> posts = GetPosts();
   Newtonsoft.Json.Linq.JObject jobject = Newtonsoft.Json.Linq.JObject.FromObject(new
   {
    channel = new
    {
     title = "James Newton-King",
     link = "http://james.newtonking.com",
     description = "James Newton-King's blog.",
     item =
      from p in posts
      orderby p.Title
      select new
      {
       title = p.Title,
       description = p.Description,
       link = p.Link,
       category = p.Category
      }
    }
   });

   return jobject;
  }
  /*
   {
    "channel": {
     "title": "James Newton-King",
     "link": "http://james.newtonking.com",
     "description": "James Newton-King's blog.",
     "item": [{
      "title": "jewron",
      "description": "4546fds",
      "link": "http://www.baidu.com",
      "category": "jhgj"
     },
     {
      "title": "jofdsn",
      "description": "mdsfan",
      "link": "http://www.baidu.com",
      "category": "6546"
     },
     {
      "title": "jokjn",
      "description": "m3214an",
      "link": "http://www.baidu.com",
      "category": "hg425"
     },
     {
      "title": "jon",
      "description": "man",
      "link": "http://www.baidu.com",
      "category": "goodman"
     }]
    }
   }
   */
  //Creating JObject
  public Newtonsoft.Json.Linq.JObject GetJObject4()
  {
   List<Post> posts = GetPosts();
   Newtonsoft.Json.Linq.JObject rss = new Newtonsoft.Json.Linq.JObject(
     new Newtonsoft.Json.Linq.JProperty("channel",
      new Newtonsoft.Json.Linq.JObject(
       new Newtonsoft.Json.Linq.JProperty("title", "James Newton-King"),
       new Newtonsoft.Json.Linq.JProperty("link", "http://james.newtonking.com"),
       new Newtonsoft.Json.Linq.JProperty("description", "James Newton-King's blog."),
       new Newtonsoft.Json.Linq.JProperty("item",
        new Newtonsoft.Json.Linq.JArray(
         from p in posts
         orderby p.Title
         select new Newtonsoft.Json.Linq.JObject(
          new Newtonsoft.Json.Linq.JProperty("title", p.Title),
          new Newtonsoft.Json.Linq.JProperty("description", p.Description),
          new Newtonsoft.Json.Linq.JProperty("link", p.Link),
          new Newtonsoft.Json.Linq.JProperty("category",
           new Newtonsoft.Json.Linq.JArray(
            from c in p.Category
            select new Newtonsoft.Json.Linq.JValue(c)
           )
          )
         )
        )
       )
      )
     )
    );

   return rss;
  }
  /*
   {
    "channel": {
     "title": "James Newton-King",
     "link": "http://james.newtonking.com",
     "description": "James Newton-King's blog.",
     "item": [{
      "title": "jewron",
      "description": "4546fds",
      "link": "http://www.baidu.com",
      "category": ["j", "h", "g", "j"]
     },
     {
      "title": "jofdsn",
      "description": "mdsfan",
      "link": "http://www.baidu.com",
      "category": ["6", "5", "4", "6"]
     },
     {
      "title": "jokjn",
      "description": "m3214an",
      "link": "http://www.baidu.com",
      "category": ["h", "g", "4", "2", "5"]
     },
     {
      "title": "jon",
      "description": "man",
      "link": "http://www.baidu.com",
      "category": ["g", "o", "o", "d", "m", "a", "n"]
     }]
    }
   }
   */

  public class Post
  {
   public string Title { get; set; }
   public string Description { get; set; }
   public string Link { get; set; }
   public string Category { get; set; }
  }
  private List<Post> GetPosts()
  {
   List<Post> listp = new List<Post>()
   {
    new Post{Title="jon",Description="man",Link="http://www.baidu.com",Category="goodman"},
    new Post{Title="jofdsn",Description="mdsfan",Link="http://www.baidu.com",Category="6546"},
    new Post{Title="jewron",Description="4546fds",Link="http://www.baidu.com",Category="jhgj"},
    new Post{Title="jokjn",Description="m3214an",Link="http://www.baidu.com",Category="hg425"}
   };
   return listp;
  }

  #endregion

  #region GetJArray
  /*
   * //example:=>
   * 
   Linq2Json l2j = new Linq2Json();
   Newtonsoft.Json.Linq.JArray jarray = l2j.GetJArray();
   return Newtonsoft.Json.JsonConvert.SerializeObject(jarray, Newtonsoft.Json.Formatting.Indented);
   //return jarray.ToString();
   */
  //Parsing a JSON Array from text 
  public Newtonsoft.Json.Linq.JArray GetJArray()
  {
   string json = @"[
        'Small',
        'Medium',
        'Large'
       ]";

   Newtonsoft.Json.Linq.JArray jarray = Newtonsoft.Json.Linq.JArray.Parse(json);
   return jarray;
  }

  //Creating JArray
  public Newtonsoft.Json.Linq.JArray GetJArray2()
  {
   Newtonsoft.Json.Linq.JArray array = new Newtonsoft.Json.Linq.JArray();
   Newtonsoft.Json.Linq.JValue text = new Newtonsoft.Json.Linq.JValue("Manual text");
   Newtonsoft.Json.Linq.JValue date = new Newtonsoft.Json.Linq.JValue(new DateTime(2000, 5, 23));
   //add to JArray
   array.Add(text);
   array.Add(date);

   return array;
  }

  #endregion

  //待续...

 }
}

测试效果:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testjson.aspx.cs" Inherits="microstore.testjson" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
 <title></title>
 <style type="text/css">
  body{ font-family:Arial,微软雅黑; font-size:14px;}
  a{ text-decoration:none; color:#333;}
  a:hover{ text-decoration:none; color:#f00;}
 </style>
</head>
<body> 
 <form id="form1" runat="server">
  <h3>序列化对象</h3>
  表现1:<br />
  <%=TestJsonSerialize()%>
  <%=TestListJsonSerialize() %>
  表现2:<br />
  <%=TestListJsonSerialize2() %>
  <hr />
  <h3>反序列化对象</h3>
  <p>单个对象</p>
  <%=TestJsonDeserialize() %>
  <p>多个对象</p>
  <%=TestListJsonDeserialize() %> 
  <p>反序列化成数据字典Dictionary</p>
  <%=TestDeserialize2Dic() %>
  <hr /> 
  <h3>自定义反序列化</h3>
  <%=TestListCustomDeserialize()%>
  <hr />
  <h3>序列化输出的忽略特性</h3>
  NullValueHandling特性忽略=><br />
  <%=CommonSerialize() %><br />
  <%=IgnoredSerialize()%><br /><br />
  属性标记忽略=><br />
  <%=OutIncluded() %><br />
  <%=OutIncluded2() %>
  <hr />
  <h3>Serializing Partial JSON Fragments</h3>
  <%=SerializingJsonFragment() %>
  <hr />
  <h3>ShouldSerialize</h3>
  <%=ShouldSerializeTest() %><br />
  <%=JJJ() %><br /><br />
  <%=TestReadJsonFromFile() %>
 </form>
</body>
</html>

显示:

序列化对象

表现1:

{ "Name": "Apple", "Expiry": "2014-05-04 02:08:58", "Price": 3.99, "Sizes": null }

[ { "Name": "Apple", "Expiry": "2014-05-04 02:08:58", "Price": 3.99, "Sizes": [ "Small", "Medium", "Large" ] }, { "Name": "Apple", "Expiry": "2014-05-04 02:08:58", "Price": 3.99, "Sizes": [ "Small", "Medium", "Large" ] } ]

表现2:

[ { "Name": "Apple", "Expiry": "2014-05-04 02:08:58", "Price": 3.99, "Sizes": [ "Small", "Medium", "Large" ] }, { "Name": "Apple", "Expiry": "2014-05-04 02:08:58", "Price": 3.99, "Sizes": [ "Small", "Medium", "Large" ] } ]

反序列化对象

单个对象

•Apple
•2014-05-03 10:20:59
•3.99
•Small,Medium,Large

多个对象

•Apple
•2014-05-03 10:20:59
•3.99
•Small,Medium,Large

•Apple
•2014-05-03 10:20:59
•3.99
•Small,Medium,Large

反序列化成数据字典Dictionary

Dictionary长度2
•key:key1,value:zhangsan
•key:key2,value:lisi

---------------------------------------------------------------

自定义反序列化

•当前List[x]对象类型:microstore.Employee
•FirstName:Maurice
•LastName:Moss
•BirthDate:1981-3-8 0:00:00
•Department:IT
•JobTitle:Support


•当前List[x]对象类型:microstore.Employee
•FirstName:Jen
•LastName:Barber
•BirthDate:1985-12-10 0:00:00
•Department:IT
•JobTitle:Manager

-------------------------------------------------------------

序列化输出的忽略特性
NullValueHandling特性忽略=>
{ "Name": "Bad Boys III", "Description": "It's no Bad Boys", "Classification": null, "Studio": null, "ReleaseDate": null, "ReleaseCountries": null }
{ "Name": "Bad Boys III", "Description": "It's no Bad Boys" }

属性标记忽略=>
{ "Model": "zhangsan", "Year": "2014-05-01T02:08:58.671875+08:00", "Features": [ "aaaa", "bbbb", "cccc" ] }
{ "Name": "zhangsan", "SalePrice": 3999.0 }
-----------------------------------------------------------------

Serializing Partial JSON Fragments
•Title:Paris Hilton - Wikipedia, the free encyclopedia
•Content: [1] In 2006, she released her debut album...
•Url:http://en.wikipedia.org/wiki/Paris_Hilton
•Title:Paris Hilton
•Content: Self: Zoolander. Socialite Paris Hilton...
•Url:http://www.imdb.com/name/nm0385296/

--------------------------------------------------------------------------------

ShouldSerialize
[ { "Name": "Joe Employee", "Manager": { "Name": "Mike Manager" } }, { "Name": "Mike Manager" } ]
{ "name": "Widget", "expiry": "2014-5-1 2:08:58", "price": 9.99, "sizes": [ "Small", "Medium", "Large" ] }

{ "channel": { "title": "James Newton-King", "link": "http://james.newtonking.com", "description": "James Newton-King's blog.", "item": [ { "title": "jewron", "description": "4546fds", "link": "http://www.baidu.com", "category": [ "j", "h", "g", "j" ] }, { "title": "jofdsn", "description": "mdsfan", "link": "http://www.baidu.com", "category": [ "6", "5", "4", "6" ] }, { "title": "jokjn", "description": "m3214an", "link": "http://www.baidu.com", "category": [ "h", "g", "4", "2", "5" ] }, { "title": "jon", "description": "man", "link": "http://www.baidu.com", "category": [ "g", "o", "o", "d", "m", "a", "n" ] } ] } }

以上这篇Json.net 常用使用小结(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持路饭。


本文地址:http://www.45fan.com/bcdm/62528.html
Tags: 推荐 小结 Json.net
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部