• 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" ] } ] } } 

    http://blog.csdn.net/joyhen/article/details/24805899

  • 相关阅读:
    Alpha 冲刺 (1/10)
    项目需求分析答辩总结
    项目选题报告答辩总结
    项目UML设计(团队)
    第七次作业--项目需求分析(团队)
    第六次作业--结对编程第二次
    Alpha 冲刺 (4/10)
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
  • 原文地址:https://www.cnblogs.com/JuneZhang/p/5114439.html
Copyright © 2020-2023  润新知