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 常用使用小结(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JSONP原理及简单实现

    在web2.0时代,熟练的使用ajax是每个前端攻城师必备的技能.然而由于受到浏览器的限制,ajax不允许跨域通信. JSONP就是目前主流的实现跨域通信的解决方案. 虽然在在jquery中,我们可以通过$.ajax的dataType设置为jsonp来调用jsonp,但是jsonp和ajax的实现原理一个关系都木有.jsonp主要是通过script可以链接远程url来实现跨域请求的.如: <script src="http://jsonp.js?callback=xxx">

  • 浅析JSONP技术原理及实现

    跨域问题一直是前端中常见的问题,每当说到跨域,第一浮现的技术必然就是JSONP JSONP在我的理解,它并不是ajax,它是在文档中插入一个script标签,创建_callback方法,通过服务器配合执行_callback方法,并传入一些参数 JSONP的局限就在于,因为是通过插入script标签,所以参数只能通过url传入,因此只能满足get请求,特别jQuery的ajax方法时,即使设置type: 'POST',但是只要设置了dataType: 'jsonp',在请求时,都会自动使用GET请

  • 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 Empl

  • json与jsonp知识小结(推荐)

    json 1. json 的值可以是下面这些类型: ① 数字(整数或浮点数),比如123,1.23 ② 字符串(在双引号中) ③ 逻辑值(true 或 false) ④ 数组(在方括号中) ⑤ 对象(在花括号中) ⑥ null 2. json解析方法 ① eval('(' + jsondata + ')' ); 使用时永远是不安全的,代码注入 ② JSON.parse(jsondata); JSONLint json:字符串校验工具 3. jQuery 实现ajax jQuery.ajax([s

  • js创建对象的几种常用方式小结(推荐)

    第一种模式:工厂方式 复制代码 代码如下: var lev=function(){ return "我们"; }; function Parent(){ var Child = new Object(); Child.name="脚本"; Child.age="4"; Child.lev=lev; return Child; }; var x = Parent(); alert(x.name); alert(x.lev()); 说明: 1.在函数

  • Python3内置模块之json编解码方法小结【推荐】

    Python3中我们利用内置模块 json 解码和编码 JSON对象 ,JSON(JavaScript Object Notation)是指定 RFC 7159(废弃了RFC 4627)和 ECMA-404是一种轻量级数据交换格式,受 JavaScript对象文字语法的启发 (虽然它不是JavaScript 1的严格子集).下面为Python对象-->JSON对象的对照关系表. dumps编码 我们利用 dumps 将Python对象编码为 JSON对象 ,当然 dumps 只完成了序列化为st

  • python里读写excel等数据文件的6种常用方式(小结)

    下面整理下python有哪些方式可以读取数据文件. 1. python内置方法(read.readline.readlines) read() : 一次性读取整个文件内容.推荐使用read(size)方法,size越大运行时间越长 readline() :每次读取一行内容.内存不够时使用,一般不太用 readlines() :一次性读取整个文件内容,并按行返回到list,方便我们遍历 2. 内置模块(csv) python内置了csv模块用于读写csv文件,csv是一种逗号分隔符文件,是数据科学

  • JS常用函数和常用技巧小结

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数,代码如下: var Ajax = function(url, type success, error) { $.ajax({ url: url, type: type, dataType: 'json', timeout: 10000, success: fu

  • PHP的openssl加密扩展使用小结(推荐)

    引言 互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求).数据完整性(没有被人修改过).数据私密性(密文,无法直接读取)等.虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方法来手动加密. 虽然对于一般的WEB开发人员来说,大可不必深入了解一些安全相关的底层技术,但学习加密基础知识,使用现有加密相关工具却十分必要.

  • Selenium Webdriver元素定位的八种常用方式(小结)

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下. 1. By.name() 假设我们要测试的页面源码如下: <button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba"><

  • PyCharm常用配置和常用插件(小结)

    常用配置 以下配置能使用File -> New Projects Settings -> Settings for New Projects进行配置的尽量用这个配置,因为这个配置是作用于所有新建项目的,不能用的选择File -> Settings 配置Python解释器 文件编码 文件和代码模板 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @author JourWon # @date ${DATE} # @file ${NAME}.p

  • linux下socket编程常用头文件(推荐)

    sys/types.h:数据类型定义 sys/socket.h:提供socket函数及数据结构 netinet/in.h:定义数据结构sockaddr_in arpa/inet.h:提供IP地址转换函数 netdb.h:提供设置及获取域名的函数 sys/ioctl.h:提供对I/O控制的函数 sys/poll.h:提供socket等待测试机制的函数 其他在网络程序中常见的头文件 unistd.h:提供通用的文件.目录.程序及进程操作的函数 errno.h:提供错误号errno的定义,用于错误处理

随机推荐