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

前端技术 2023/09/04 .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 常用使用小结(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持phpstudy。

本文地址:https://www.stayed.cn/item/9366

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。