日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Json.Net学习笔记

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Json.Net学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Json.Net學習筆記 摘自:? http://www.verydemo.com/demo_c360_i45119.html 分類:?編程語言/?ASP.NET/?文章 導讀: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"": …… Json.Net學習筆記(十四) JSON的部分序列化

通常當用到大的Json文檔的時候,你可能只對其中的一小個片段信息感興趣。這種情況下你想把Json.Net轉換為.Net 對象就會讓人很困擾,因為你必須為Json的整個結果定義一個.Net的類。

使用Json.Net很容易避開這個問題。在把它們傳遞到Json.Net序列化器之前,你可以使用Linq to Json 提取Json中你想要序列化的一些片段。

?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
??????????????? }";
??????????? JObject googleSearch = JObject.Parse(googleSearchText);
??????????? // get JSON result objects into a list
??????????? IList<JToken> results = googleSearch["responseData"]["results"].Children().ToList();

??????????? // serialize JSON results into .NET objects
??????????? IList<SearchResult> searchResults = new List<SearchResult>();
??????????? foreach (JToken result in results)
??????????? {
??????????????? SearchResult searchResult = JsonConvert.DeserializeObject<SearchResult>(result.ToString());
??????????????? searchResults.Add(searchResult);
??????????? }

??????????? // Title = <b>Paris Hilton</b> - Wikipedia, the free encyclopedia
??????????? // Content = [1] In 2006, she released her debut album...
??????????? // Url =?http://en.wikipedia.org/wiki/Paris_Hilton

??????????? // Title = <b>Paris Hilton</b>
??????????? // Content = Self: Zoolander. Socialite <b>Paris Hilton</b>...
??????????? // Url =?http://www.imdb.com/name/nm0385296/

posted @ 2011-06-11 15:14 資源收集 閱讀(44) 評論(0)?編輯 Json.Net學習筆記(十三) 縮小序列化Json的大小 當序列化.Net對象為Json對象時經常會遇到的一個問題是:最終的Json包含大量多余的屬性和屬性值。這個問題在返回Json到客戶端時顯得特別重要。Json越大意味著需要更大的帶寬,使網速變得更慢。

為了解決多余的Json這個問題,Json.Net有一系列內置的選項可以進行調整。

->JsonIgnoreAttribute and DataMemberAttribute

默認情況下,在Json創建的時候Json.Net會包含所有類級別的public屬性和字段。添加JsonIgnoreAttribute到屬性上,告訴序列化器序列化時跳過它。

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

??????? // ignored
??????? [JsonIgnore]
??????? public DateTime LastModified { get; set; }
??? }

如果類有很多屬性,你只想序列化它的一小部分,添加JsonIgore到所有其他的屬性上會比較冗余,也比較容易出錯。有一種用來處理這種情況的方法,添加DataContractAttribute到類上,添加DataMemberAttribute到需要被序列化的屬性上。與使用JsonIgnoreAttribute的opt-out序列化相比,opt-in序列化僅僅你標記的屬性被需列化。

using System.Runtime.Serialization;

? [DataContract]
??? public class Computer
??? {
??????? // included in JSON
??????? [DataMember]
??????? public string Name { get; set; }
??????? [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; }
??? }

->Formatting

Json序列化時,用可選參數Formatting.Indented生成良好的顯示格式,可讀性更好。另一方面,Formatting.None會跳過不必要的空格和換行符,讓Json的結果更小。生成的顯示格式更加緊湊,也許效率更高。

->NullValueHandling

?? 在序列化器中NullVlaueHandling是可選的。它控制序列化器如何處理值為null的屬性。通過設置NullValueHandling.Ignore值,序列化器會跳過值為null的屬性。

? 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; }
??? }

測試1:

?????????? Movie movie = new Movie();
??????????? movie.Name = "Bad Boys III";
??????????? movie.Description = "It's no Bad Boys";

??????????? string included = JsonConvert.SerializeObject(movie,
????????????? Formatting.Indented,
????????????? new JsonSerializerSettings { });
??????????? Console.WriteLine(included);

輸出結果:

{
? "Name": "Bad Boys III",
? "Description": "It's no Bad Boys",
? "Classification": null,
? "Studio": null,
? "ReleaseDate": null,
? "ReleaseCountries": null
}

測試2:

?????????? string ignored = JsonConvert.SerializeObject(movie,
????????????? Formatting.Indented,
????????????? new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
??????????? Console.WriteLine(ignored);

輸出結果:

{
? "Name": "Bad Boys III",
? "Description": "It's no Bad Boys"
}

NullValueHandling也可以在單獨的屬性上用JsonPropertyAttribute進行定制。使用JsonPropertyAttribute時設置的NullValueHandling值會在Json序列化器中為該屬性進行重寫。

->DefaultValuehandling

?? 在序列化器中DefaultValuehandling是可選的。它控制序列化器如何處理帶有默認值的屬性。通過設置DefaultValuehandling.Ignore值,序列化器會跳過帶有默認值的屬性。對于引用類型為null,對于值類型,如int和DateTime,序列化器將跳過默認未初使化值的值類型。

? Json.Net也允許你通過DefaultValueAttribute自定義默認值,例如:如果一個字符串類型的屬性Department在它的默認狀態下總是返回一個空字符,但是在你的Json對象中你不想要那個空字符串,你可以在Department上使用空字符串參數標記DefaultValueAttribute,這意味著Department在序列化時不再寫入Json中,除非它有非空值。

? 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
??????? [DefaultValue(30)]
??????? public int FollowUpDays { get; set; }
??????? [DefaultValue("")]
??????? public string FollowUpEmailAddress { get; set; }
??? }

測試1:

???????????Invoice invoice = new Invoice
??????????? {
??????????????? Company = "Acme Ltd.",
??????????????? Amount = 50.0m,
??????????????? Paid = false,
??????????????? FollowUpDays = 30,
??????????????? FollowUpEmailAddress = string.Empty,
??????????????? PaidDate = null
??????????? };

??????????? string includedDefaultValue = JsonConvert.SerializeObject(invoice,
????????????? Formatting.Indented,
????????????? new JsonSerializerSettings { });
??????????? Console.WriteLine(includedDefaultValue);

輸出結果:

{
? "Company": "Acme Ltd.",
? "Amount": 50.0,
? "Paid": false,
? "PaidDate": null,
? "FollowUpDays": 30,
? "FollowUpEmailAddress": ""
}

測試2:

?????????? ?string ignoredDefaultValue = JsonConvert.SerializeObject(invoice,
????????????? Formatting.Indented,
????????????? new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
??????????? Console.WriteLine(ignoredDefaultValue);

輸出結果:

{
? "Company": "Acme Ltd.",
? "Amount": 50.0,
? "Paid": false//??
}

DefaultValueHandling也可以在單獨的屬性上用JsonPropertyAttribute進行定制。使用JsonPropertyAttribute時設置的DefaultValueHandling值會在Json序列化器中為該屬性進行重寫。

->IContractResolver

? 為了獲得更多的靈活性,IContractResolver接口提供了定制.Net對象序列化為Json的每一個方面,包括在運行時改變序列化的行為。

?public class DynamicContractResolver : DefaultContractResolver
??? {
??????? private readonly char _startingWithChar;
??????? public DynamicContractResolver(char startingWithChar)
??????? {
??????????? _startingWithChar = startingWithChar;
??????? }

??????? protected override IList<JsonProperty> CreateProperties(JsonObjectContract contract)
??????? {
??????????? IList<JsonProperty> properties = base.CreateProperties(contract);

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

??????????? return properties;
??????? }
??? }

??? 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; }
??? }

測試:

?????????? Book book = new Book
??????????? {
??????????????? BookName = "The Gathering Storm",
??????????????? BookPrice = 16.19m,
??????????????? AuthorName = "Brandon Sanderson",
??????????????? AuthorAge = 34,
??????????????? AuthorCountry = "United States of America"
??????????? };

??????????? string startingWithA = JsonConvert.SerializeObject(book, Formatting.Indented,
????????????? new JsonSerializerSettings { ContractResolver = new DynamicContractResolver('A') });
??????????? Console.WriteLine(startingWithA);
??????????? // {
??????????? //?? "AuthorName": "Brandon Sanderson",
??????????? //?? "AuthorAge": 34,
??????????? //?? "AuthorCountry": "United States of America"
??????????? // }

??????????? string startingWithB = JsonConvert.SerializeObject(book, Formatting.Indented,
????????????? new JsonSerializerSettings { ContractResolver = new DynamicContractResolver('B') });
??????????? Console.WriteLine(startingWithA);
??????????? // {
??????????? //?? "BookName": "The Gathering Storm",
??????????? //?? "BookPrice": 16.19
??????????? // }

posted @ 2011-06-11 15:13 資源收集 閱讀(81) 評論(0)?編輯 Json.Net學習筆記(十二) 協議解析

IContractResolver接口提供了一種方法去定制序列化器如何去序列化和反序列化.Net對象為Json對象

實現IContractResolver接口,然后為Json序列化器分配一個實例對象,這樣你就可以控制對象是否被序列化為Json對象或者Json數組、對象的成員應該被序列化成什么、如何被序列化、及他們被誰調用等。

->DefaultContractResolver

???DefaultContractResolver是序列化器默認的解析器,它以虛函數的形式提供了很多擴展功能,可以被覆寫(overriden).

->CamelCasePropertyNamesContractResolver

?? CamelCasePropertyNamesContractResolver繼承自DefaultContractResolver,并且簡單的覆寫了Json屬性名為camel命名規則的形式(首字母小寫)

? public class Product
??? {
??????? public string Name { get; set; }
??????? public decimal Price { get; set; }
??????? public DateTime ExpiryDate { get; set; }
??????? public string[] Sizes { get; set; }

??? }

測試:

?Product product = new Product
??????????? {
??????????????? ExpiryDate = new DateTime(2010, 12, 20, 18, 1, 0, DateTimeKind.Utc),
??????????????? Name = "Widget",
??????????????? Price = 9.99m,
??????????????? Sizes = new[] { "Small", "Medium", "Large" }
??????????? };
??????????? string json = JsonConvert.SerializeObject(
??????????????????????????? product,
??????????????????????????? Formatting.Indented,
??????????????????????????? new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }
???????????????????????????? );
??????????? Console.WriteLine(json);

輸出結果:

{
? "name": "Widget",
? "price": 9.99,
? "expiryDate": "\/Date(1292868060000)\/",
? "sizes": [
??? "Small",
??? "Medium",
??? "Large"
? ]

posted @ 2011-06-11 15:12 資源收集 閱讀(53) 評論(0)?編輯 Json.Net學習筆記(十一) CustomCreationConverter

CustomCreationConverter是一個在序列化過程中提供自定方式去創建一個對象的Json轉換器,一旦對象被創建,它將被序列化器填充值。

?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 : CustomCreationConverter<IPerson>
??? {
??????? public override IPerson Create(Type objectType)
??????? {
??????????? return new Employee();
??????? }
??? }

這是一個非常簡單的例子。更復雜的場景可能包含一個對象工廠或者服務定位器(service locator)用來在運行時解析這個對象。

測試:???

????? string json = @"[
????????????? {
??????????????? ""FirstName"": ""Maurice"",
??????????????? ""LastName"": ""Moss"",
??????????????? ""BirthDate"": ""\/Date(252291661000)\/"",
??????????????? ""Department"": ""IT"",
??????????????? ""JobTitle"": ""Support""
????????????? },
????????????? {
??????????????? ""FirstName"": ""Jen"",
??????????????? ""LastName"": ""Barber"",
??????????????? ""BirthDate"": ""\/Date(258771661000)\/"",
??????????????? ""Department"": ""IT"",
??????????????? ""JobTitle"": ""Manager""
????????????? }
??????????? ]";

??????????? List<IPerson> people = JsonConvert.DeserializeObject<List<IPerson>>(json, new PersonConverter());
??????????? IPerson person = people[0];
??????????? Console.WriteLine(person.GetType());// CustomCreationConverterTest.Employee??????????
??????????? Console.WriteLine(person.FirstName);// Maurice
??????????? Employee employee = (Employee)person;
??????????? Console.WriteLine(employee.JobTitle);// Support

posted @ 2011-06-11 15:11 資源收集 閱讀(28) 評論(0)?編輯 Json.Net學習筆記(九) 異常處理

Json.Net支持在序列化和反序列化的過程中進行異常處理。異常處理讓您捕獲一個異常,您可以選擇是否處理它,繼續序列化或者讓異常拋給上一層,在你的應用程序中被拋出。

異常處理通過兩個方法來定義:the Error event on JsonSerializer 和 OnErrorAttribute

>Error Event

? error event是一個建立在JsonSerializer 上的異常處理.當序列化或者反序列化JSON時,任何有異常拋出的情況error event都會被觸發.就像建立在JsonSerializer上的所有設置一樣,它也可以在JsonSerializerSettings 上進行設置從而傳遞給JsonConvert的序列化方法.

示例:

?List<string> errors = new List<string>();
??????????? List<DateTime> c = JsonConvert.DeserializeObject<List<DateTime>>(@"[
????????????????? ""2010-12-19T00:00:00Z"",
????????????????? ""I am not a date and will error!"",
????????????????? [
??????????????????? 1
????????????????? ],
????????????????? ""2011-01-01T00:00:00Z"",
????????????????? null,
????????????????? ""2010-12-25T00:00:00Z""
????????????????? ]", new JsonSerializerSettings()
??????????????????????? {
??????????????????????????? Error = delegate(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs e)
??????????????????????????? {
??????????????????????????????? errors.Add(e.ErrorContext.Error.Message);
??????????????????????????????? e.ErrorContext.Handled = true;
??????????????????????????? },
??????????????????????????? Converters = { new IsoDateTimeConverter() }
??????????????????????? });
??????????? foreach (DateTime t in c)
??????????? {
??????????????? Console.WriteLine(t.ToString());
??????????? }
??????????? //2010-12-19 00:00:00
??????????? //2011-01-01 00:00:00
??????????? //2010-12-25 00:00:00
??????????? foreach (string err in errors)
??????????? {
??????????????? Console.WriteLine(err);
??????????? }
??????????? //The string was not recognized as a valid DateTime. There is a unknown word starting at index 0.
??????????? //Unexpected token parsing date. Expected String, got StartArray.
??????????? //Cannot convert null value to System.DateTime.

? 在這個例子中我們把一個Json數組反序列化為一個DateTime的集合,在JsonSerializerSettings中有一個hander被賦值成了error event ,它用來記錄error message,并標記這個error為已處理(handled).

反序列化JSON的結果是三個被成功反序列化的日期和三個error messages:一個是不正確的格式,"I am not a date and will error!",一個是嵌套了JSON數組,最后一個是null值,因為定義的list不允許有可空類型的DateTime.這個事件處理已經記錄了這些信息,Json.Net在序列化時繼續進行(沒有因為異常而停止),因為這些錯誤已經被標記為已處理。

?? 值得注意的是,在Json.Net進行異常處理時,沒有處理的異常將會被拋到上一層,并在它的每個parent觸發事件,例如:在序列化若干對象的集合時,一個未處理的異常將被觸發兩次,首先在對象上,然后在集合上。這樣就會讓您在處理異常的時候,選擇在它發生的地方,或者是它的一個parent上。


?JsonSerializer serializer = new JsonSerializer();
??????????? serializer.Error += delegate(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs e)
??????????? {
??????????????? // only log an error once
??????????????? if (e.CurrentObject == e.ErrorContext.OriginalObject)
??????????????????? errors.Add(e.ErrorContext.Error.Message);
??????????? };

如果您不是立即處理一個異常,僅僅是想針對它完成一次操作,您可以驗證一下ErrorEventArg's CurrentObject是否等于OriginalObject.OriginalObject是拋出異常的對象,CurrentObject是事件被觸發的對象.他們只會在第一次(事件被OriginalObject觸發時)相等.

>OnErrorAttribute

?OnErrorAttribute的工作方式非常像其他Json.Net支持的.NET serialization attributes ,簡單地把它標記在帶有正確參數(一個StreamingContext和一個ErrorContext)的方法上就可以使用了,與方法的名字沒有關系。

示例:

? public class PersonError
??? {
??????? private List<string> _roles;
??????? public string Name { get; set; }
??????? public int Age { get; set; }
??????? public List<string> Roles
??????? {
??????????? get
??????????? {
??????????????? if (_roles == null)
??????????????????? throw new Exception("Roles not loaded!");
??????????????? return _roles;
??????????? }
??????????? set { _roles = value; }
??????? }
??????? public string Title { get; set; }
??????? [OnError]
??????? internal void OnError(StreamingContext context, ErrorContext errorContext)
??????? {
??????????? errorContext.Handled = true;
??????? }
??? }

在這個例子中,當_roles沒有被設置值時訪問Roles屬性將會拋出一個異常.在序列化Roles屬性時,異常處理的方法將設置error為handled,從而允許Json.Net繼續序列化這個類。

測試:

?PersonError person = new PersonError
??????????? {
??????????????? Name = "George Michael Bluth",
??????????????? Age = 16,
??????????????? Roles = null,
??????????????? Title = "Mister Manager"
??????????? };
??????????? string json = JsonConvert.SerializeObject(person, Formatting.Indented);
??????????? Console.WriteLine(json);

輸出:

??????????? {
????????????? "Name": "George Michael Bluth",
????????????? "Age": 16,
????????????? "Title": "Mister Manager"
??????????? }

?

posted @ 2011-06-11 15:10 資源收集 閱讀(57) 評論(0)?編輯 Json.Net學習筆記(十) 保持對象引用

默認情況下,Json.Net將通過對象的值來序列化它遇到的所有對象。如果工個list包含兩個Person引用,這兩個引用都指向同一個對象,Json序列化器將輸出每一個引用的所有名稱和值。

定義類:

? public class Person
??? {
??????? public DateTime BirthDate { get; set; }
??????? public DateTime LastModified { get; set; }
??????? public string Name { get; set; }
??? }

測試:

???????? Person p = new Person()
??????????? {
??????????????? BirthDate = new DateTime(1985, 11, 27, 0, 0, 0, DateTimeKind.Utc),
??????????????? LastModified = new DateTime(2010, 12, 20, 0, 0, 0, DateTimeKind.Utc),
??????????????? Name = "James"
??????????? };
??????????? List<Person> people = new List<Person>();
??????????? people.Add(p);
??????????? people.Add(p);
??????????? string json = JsonConvert.SerializeObject(people, Formatting.Indented);
??????????? Console.WriteLine(json);

輸出結果:

[
? {
??? "BirthDate": "\/Date(501897600000)\/",
??? "LastModified": "\/Date(1292803200000)\/",
??? "Name": "James"
? },
? {
??? "BirthDate": "\/Date(501897600000)\/",
??? "LastModified": "\/Date(1292803200000)\/",
??? "Name": "James"
? }
]

在大多數情況下這是期望的結果,但是在某些場景下,將list中的第二項作為第一項的一個引用來輸出會是一個更好的解決方案。如果上面的Json現在被反序列化,返回的list會包含兩個完全分離的對象,它們具有相同的值。通過值來輸出引用也會在對象上導致循環引用的發生。

>PreserveReferencesHandling

?? string json2 = JsonConvert.SerializeObject(people, Formatting.Indented,
??????????????? new JsonSerializerSettings() { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
??????????? Console.WriteLine(json2);

輸出結果:

???????? ?[
????????????? {
??????????????? "$id": "1",
??????????????? "BirthDate": "\/Date(501897600000)\/",
??????????????? "LastModified": "\/Date(1292803200000)\/",
??????????????? "Name": "James"
????????????? },
????????????? {
??????????????? "$ref": "1"
????????????? }
??????????? ]?

????????? List<Person> deserializedPeople = JsonConvert.DeserializeObject<List<Person>>(json2,
??????????????? new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });

??????????? Console.WriteLine(deserializedPeople.Count);// 2???????

??????????? Person p1 = deserializedPeople[0];
??????????? Person p2 = deserializedPeople[1];
??????????? Console.WriteLine(p1.Name);// James
??????????? Console.WriteLine(p2.Name);// James
??????????? bool equal = Object.ReferenceEquals(p1, p2);// true

在list中的第一個Person被序列化時增加了一個額外的對象Id,現在第二個Person對象僅僅是第一個的引用。

現在使用PreserveReferencesHandling后,在序列化時只創建了一個Person對象,list中包含它的兩個引用,原來我們叫作反射(mirroring) 。

>IsReference on JsonObjectAttribute, JsonArrayAttribute and JsonPropertyAttribute

? 在對象序列化器上設置PreserveReferencesHandling,將會改變所有對象被序列化和反序列化的方式。為了更加細致地控制對象和成員被序列化為一個引用,可以在JsonObjectAttribute, JsonArrayAttribute 和 JsonPropertyAttribute上使用IsReference 屬性.

在JsonObjectAttribute, JsonArrayAttribute 上設置IsReference 為true,意味著Json序列化器總是會序列這個類型為一個引用。在JsonPropertyAttribute上設置IsReference為true將只序列化這個屬性為一個引用。

?[JsonObject(IsReference = true)]
??? public class EmployeeReference
??? {
??????? public string Name { get; set; }
??????? public EmployeeReference Manager { get; set; }
??? }

測試:

?????????? List<EmployeeReference> empList = new List<EmployeeReference>();
??????????? empList.Add(empRef);
??????????? empList.Add(empRef);
??????????? string empRefJson = JsonConvert.SerializeObject(empList, Formatting.Indented);
??????????? Console.WriteLine(empRefJson);

輸出結果:

[
? {
??? "$id": "1",
??? "Name": "IsReference",
??? "Manager": null
? },
? {
??? "$ref": "1"
? }
]

>IReferenceResolver

要想定制引用的生成方式,可以繼承自IReferenceResolver接口來使用Json序列化器。

posted @ 2011-06-11 15:10 資源收集 閱讀(49) 評論(0)?編輯 Json.Net學習筆記(七) 序列化集合

Json序列化器為序列化及反序列化集合對象提供了良好的支持.

->Serializing

?? 為了序列化一個集合---一個泛型的list,array,dictionary,或者自定義集合---簡單地調用序列化器,使用您想要進行序列化的集合對象作為參數,Json.Net會序列化集合以及所有它包含的值。

示例:

public class Product
??? {
??????? public string Name { get; set; }
??????? public decimal Price { get; set; }
??????? [JsonConverter(typeof(IsoDateTimeConverter))]
??????? public DateTime ExpiryDate { get; set; }
??? }

測試:

??????????? Product p1 = new Product()
??????????? {
??????????????? Name = "Product 1",
??????????????? Price = 99.95m,
??????????????? ExpiryDate = new DateTime(2010, 12, 19, 0, 0, 0, DateTimeKind.Utc)
??????????? };
??????????? Product p2 = new Product
??????????? {
??????????????? Name = "Product 2",
??????????????? Price = 12.50m,
??????????????? ExpiryDate = new DateTime(2011, 1, 1, 0, 0, 0, DateTimeKind.Utc)
??????????? };
??????????? List<Product> products = new List<Product>();
??????????? products.Add(p1);
??????????? products.Add(p2);
??????????? string json = JsonConvert.SerializeObject(products, Formatting.Indented);
??????????? Console.WriteLine(json);

輸出結果:

[
? {
??? "Name": "Product 1",
??? "Price": 99.95,
??? "ExpiryDate": "2010-12-19T00:00:00Z"
? },
? {
??? "Name": "Product 2",
??? "Price": 12.50,
??? "ExpiryDate": "2011-01-01T00:00:00Z"
? }
]

->Deserializing

? 為了反序列化Json到一個.Net集合中,只要指定一個您想要反序列化的集合類型就可以了,Json.Net支持多種類型的集合.

示例:

? ? string json2 = @"[
????????????????????????????? {
??????????????????????????????? ""Name"": ""Product 1"",
??????????????????????????????? ""ExpiryDate"": ""2010-12-19T00:00:00Z"",
??????????????????????????????? ""Price"": 99.95,
??????????????????????????????? ""Sizes"": null
????????????????????????????? },
????????????????????????????? {
??????????????????????????????? ""Name"": ""Product 2"",
??????????????????????????????? ""ExpiryDate"": ""2011-01-01T00:00:00Z"",
??????????????????????????????? ""Price"": 12.50,
??????????????????????????????? ""Sizes"": null
????????????????????????????? }
??????????????????????????? ]";
??????????? List<Product> productList = JsonConvert.DeserializeObject<List<Product>>(json2);
??????????? Console.WriteLine(productList.Count);//2
??????????? Product product1 = productList[0];
??????????? Console.WriteLine(product1.Name);//Product 1

->Deserializing Dictionaries

? 使用Json.Net你也可以反序列化一個Json對象到一個.Net的泛型Dictionary中.Json對象的屬性名和屬性值將會被添加到Dictionary中.

示例:

? ? ? ? ? ? string jsonDictionary = @"{""key1"":""value1"",""key2"":""value2""}";
??????????? Dictionary<string, string> dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonDictionary);
??????????? Console.WriteLine(dic.Count);//2
??????????? Console.WriteLine(dic["key1"]);//value1

posted @ 2011-06-11 15:09 資源收集 閱讀(73) 評論(0)?編輯 Json.Net學習筆記(八) 序列化的回調方法

Json.Net支持序列化回調方法,回調方法通過Json序列化器(JsonSerializer)可以用來操作一個對象,在它被序列化和反序列化之前或者之后.


OnSerializing?
OnSerialized?
OnDeserializing?
OnDeserialized

為了告訴序列化器在對象的序列化生命周期中哪個方法應該被調用,需要用適當的attribute(OnSerializingAttribute,?OnSerializedAttribute,?OnDeserializingAttribute,?OnDeserializedAttribute)來標記方法.

例如對象序列化的回調方法:

using Newtonsoft.Json;
using System.Runtime.Serialization;

?public class SerializationEventTestObject
??? {
??????? // This member is serialized and deserialized with no change.
??????? public int Member1 { get; set; }
??????? // The value of this field is set and reset during and?
??????? // after serialization.
??????? public string Member2 { get; set; }
??????? // This field is not serialized. The OnDeserializedAttribute?
??????? // is used to set the member value after serialization.
??????? [JsonIgnore]
??????? public string Member3 { get; set; }
??????? // This field is set to null, but populated after deserialization.
??????? public string Member4 { get; set; }
??????? public SerializationEventTestObject()
??????? {
??????????? Member1 = 11;
??????????? Member2 = "Hello World!";
??????????? Member3 = "This is a nonserialized value";
??????????? Member4 = null;
??????? }
??????? [OnSerializing]
??????? internal void OnSerializingMethod(StreamingContext context)
??????? {
??????????? Member2 = "This value went into the data file during serialization.";
??????? }
??????? [OnSerialized]
??????? internal void OnSerializedMethod(StreamingContext context)
??????? {
??????????? Member2 = "This value was reset after serialization.";
??????? }
??????? [OnDeserializing]
??????? internal void OnDeserializingMethod(StreamingContext context)
??????? {
??????????? Member3 = "This value was set during deserialization";
??????? }
??????? [OnDeserialized]
??????? internal void OnDeserializedMethod(StreamingContext context)
??????? {
??????????? Member4 = "This value was set after deserialization.";
??????? }
??? }

示例對象被序列化和反序列化:

?SerializationEventTestObject obj = new SerializationEventTestObject();
??????????? Console.WriteLine(obj.Member1);// 11
??????????? Console.WriteLine(obj.Member2);// Hello World!
??????????? Console.WriteLine(obj.Member3);// This is a nonserialized value
??????????? Console.WriteLine(obj.Member4);// null
??????????? string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
??????????? Console.WriteLine(json);

??????????? //{
??????????? //? "Member1": 11,
??????????? //? "Member2": "This value went into the data file during serialization.",
??????????? //? "Member4": null
??????????? //}

?

??????????? Console.WriteLine(obj.Member1);//11
??????????? Console.WriteLine(obj.Member2);// This value was reset after serialization.
??????????? Console.WriteLine(obj.Member3);// This is a nonserialized value
??????????? Console.WriteLine(obj.Member4);// null

??????????? obj = JsonConvert.DeserializeObject<SerializationEventTestObject>(json);
??????????? Console.WriteLine(obj.Member1);//11
??????????? Console.WriteLine(obj.Member2);// This value went into the data file during serialization.
??????????? Console.WriteLine(obj.Member3);// This value was set during deserialization
??????????? Console.WriteLine(obj.Member4);// This value was set after deserialization.

posted @ 2011-06-11 15:09 資源收集 閱讀(39) 評論(0)?編輯 Json.Net學習筆記(五) 自定義Json序列化特性

Attributes 可以用來控制Json.Net如何序列化和反序列化.Net對象。

>JsonObjectAttribute--標記在類上,用于控制該類如何被序列化為一個Json對象(JSON Object)

>JsonArrayAttribute--標記在集合上,用于控制該集合如何被序列化為一個Json集合(JSON Array)

>JsonPropertyAttribute--標記在字段和屬性上,用于控制它如何被序列化為一個Json對象中的屬性

>JsonConverterAttribute--標記在類或者字段和屬性上,用于序列化時指定Json轉換器(JsonConverter)

?和使用內置的Json.Net attributes一樣,當確定Json如何被序列化和反序列化時,Json.Net也查找DataContract和DataMember attributes。如果都存在,Json.Net 序列化特性將優先使用。

示例:


?? [JsonObject(MemberSerialization.OptOut)]
??? public class Person
??? {
??????? // "John Smith"
??????? [JsonProperty]
??????? public string Name { get; set; }
??????? // "2000-12-15T22:11:03"
??????? [JsonProperty]
??????? [JsonConverter(typeof(IsoDateTimeConverter))]
??????? public DateTime BirthDate { get; set; }
??????? // new Date(976918263055)
??????? [JsonProperty]
??????? [JsonConverter(typeof(JavaScriptDateTimeConverter))]
??????? public DateTime LastModified { get; set; }
??????? // not serialized
??????? public string Department { get; set; }
??? }
->JsonObjectAttribute
??這里的MemberSerialization標記指定成員序列化為opt-in(每一個成員都必須標記JsonProperty或者DataMember attribute才被序列化)或者opt-out(默認情況下,除了被標記為JsonIgnoreAttribute的所有成員都將被序列化,這是Json.Net 的默認行為)
? Json.Net把實現了IEnumerable接口的.Net類序列化為一個Json集合,用IEnumerable 的值來填充該集合。標記JsonPropertyAttribute來重寫此行為,并強制序列化器序列化該類的字段和屬性。
->JsonPropertyAttribute
? JsonPropertyAttribute有很多用途
??? 1.默認情況下,Json 屬性與.Net屬性有相同的名字,這個attribute允許自定義屬性名
??? 2.當member serialization 被設置成opt-in時,指定屬性應該被序列化
??? 3.在序列化和反序列化時包含非public屬性
->JsonIgnoreAttribute
? 從序列化中排除指定的字段或者屬性
->JsonConverterAttribute
? JsonConverterAttribute指定Json序列化器(JsonSerializer)用來轉換一個對象
? 這個特性可以用來標記類或者成員,當它用來標記類的時候,由attribute指定的JsonConverter將為類提供默認的序列化方法.當它用來標記字段或者屬性的時候,指定的JsonConverter將一直用于序列化該值。
? 使用JsonConverter的優先級順序為:先成員,后類,最后為傳給JsonSerializer的任何轉換器.
示例:
??? public class MemberConverterClass
??? {
??????? public DateTime DefaultConverter { get; set; }
??????? [JsonConverter(typeof(IsoDateTimeConverter))]
??????? public DateTime MemberConverter { get; set; }
??? }//注:這是一個JsonConverterAttribute 應用于屬性的例子
測試:
?DateTime date = Convert.ToDateTime("1970-01-01T00:00:00Z").ToUniversalTime();
??????????? MemberConverterClass c = new MemberConverterClass
??????????? {
??????????????? DefaultConverter = date,
??????????????? MemberConverter = date
??????????? };
??????????? string json = JsonConvert.SerializeObject(c, Formatting.Indented);
??????????? Console.WriteLine(json);
輸出結果:
{
? "DefaultConverter": "\/Date(0)\/",
? "MemberConverter": "1970-01-01T00:00:00Z"
} posted @ 2011-06-11 15:08 資源收集 閱讀(133) 評論(0)?編輯 Json.Net學習筆記(六) Json.Net中關于時間的序列化

DateTime類型在Json中表示是很難的。

問題來源于JSON spec?(Json規范)自身,沒有精確的語法。這個規范包括objects, arrays, strings, integers 和 floats,但是對于date是什么樣子的沒有定義準確的標準。

關于時間,Json.Net使用的默認格式與微軟:"\/Date(1198908717056)\/"相同,您可以從此外獲得更多信息.

DateTime JsonConverters

由于在Json中沒有關于時間的準確標準,當與其他系統進行互操作時就會有大量不同的時間格式。幸運的是,Json.Net為了處理讀寫自定義時間提供了一個解決方案:JsonConverters. JsonConverter是用來重寫一個類型如何被序列化的。

示例:?

public class LogEntry
??? {
??????? public string Details { get; set; }
??????? public DateTime LogDate { get; set; }
??? }

測試1:

?????? LogEntry logEntry = new LogEntry()
??????????? {
??????????????? LogDate = new DateTime(2010, 12, 19, 0, 0, 0, DateTimeKind.Utc),
??????????????? Details = "Application started."
??????????? };
??????????? string defaultJson = JsonConvert.SerializeObject(logEntry, Formatting.Indented);
??????????? Console.WriteLine(defaultJson);

輸出結果:

{
? "Details": "Application started.",
? "LogDate": "\/Date(1292716800000)\/"
}

測試2:

??? string javascriptJson = JsonConvert.SerializeObject(logEntry, Formatting.Indented, new JavaScriptDateTimeConverter());
???? Console.WriteLine(javascriptJson);
輸出結果:

{
? "Details": "Application started.",
? "LogDate": new Date(
??? 1292716800000
? )
}

測試3:

??????????? string isoJson = JsonConvert.SerializeObject(logEntry, Formatting.Indented, new IsoDateTimeConverter());
??????????? Console.WriteLine(isoJson);

輸出結果:

{
? "Details": "Application started.",
? "LogDate": "2010-12-19T00:00:00Z"
}

?簡單地,通過JsonConverter您可以使用Json.Net的序列化器

>JavaScriptDateTimeConverter

? JavaScriptDateTimeConverter類是來自于Json.Net的兩個DataTime Json轉換器之一,這個轉換器序列化一個DateTime類型為一個JavaScipt日期對象(https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Date)

? new Date(1292716800000)

從技術上講,根據規范這是無效的數據格式,但是所有的瀏覽器、和一些Json的框架包括Json.Net都支持它。

>IsoDateTimeConverter

? IsoDateTimeConverter序列一個DateTime類型為一個ISO 8601格式的字符串.

? "2010-12-19T00:00:00Z"

IsoDateTimeConverter 類有一個屬性DateTimeFormat,用來更進一步的自定義字符串格式.

最后要注意的一件事是,所有被Json.Net返回的日期值都是UTC Time

posted @ 2011-06-11 15:08 資源收集 閱讀(109) 評論(0)?編輯 Json.Net學習筆記(三) Json與Xml之間的轉換

Json.Net 支持 Json 與Xml之間的相互轉換.

轉換規則:

?1.元素保持不變
?2.屬性添加前綴@
?3.單個子文本結點直接作為元素結點的值,否則通過#text訪問
?4.XML聲明和處理指令以?為前綴
?5.字符數據(Character data)、注釋、whitespace 和significate whitespace結點分別通過#cdata-section,#comment,#whitespace and #significate-whitespace 訪問。
?6.同一級多個相同名字的結點作為一組,放到同一個集合中
?7.空元素為null

using Newtonsoft.Json;

測試:

string xml = <?xml version=""1.0"" standalone=""no""?>
??????????????????????????? <root>
??????????????????????????? <person id=""1"">
??????????????????????????? <name>Alan</name>
??????????????????????????? <url>http://www.google.com</url>
??????????????????????????? </person>
??????????????????????????? <person id=""2"">
??????????????????????????? <name>Louis</name>
??????????????????????????? <url>http://www.yahoo.com</url>
??????????????????????????? </person>
??????????????????????????? Hello World
??????????????????????????? </root>";

??????????? XmlDocument doc = new XmlDocument();
??????????? doc.LoadXml(xml);

?????????? //XML?to JSON
??????????? string jsonText = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.Indented);
??????????? Console.WriteLine(jsonText);

輸出結果:

{
? "?xml": {
??? "@version": "1.0",
??? "@standalone": "no"
? },
? "root": {
??? "person": [
????? {
??????? "@id": "1",
??????? "name": "Alan",
??????? "url": "http://www.google.com"
????? },
????? {
??????? "@id": "2",
??????? "name": "Louis",
??????? "url": "http://www.yahoo.com"
????? }
??? ],
??? "#text": "\r\n??????????????????????????? Hello World\r\n??????????????????????????? "
? }
}

?

??????????? //JSON to XML

?????????? ?XmlDocument docJson = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonText);
??????????? Console.WriteLine(docJson.InnerXml);

posted @ 2011-06-11 15:04 資源收集 閱讀(68) 評論(0)?編輯 Json.Net學習筆記(四) Json對象的讀寫

為了手動讀寫Json對象,Json.Net提供了JsonReader 和 JsonWriter這兩個抽象類及其相應的派生類:

1.JsonTextReader 和 JsonTextWriter

用來讀寫Json對象的文本,JsonTextWriter 有大量設置去控制Json對象的格式。

測試:

??????????? //寫操作

??????????? StringBuilder sb = new StringBuilder();
??????????? StringWriter sw = new StringWriter(sb);
??????????? using (JsonWriter jsonWriter = new JsonTextWriter(sw))
??????????? {???????????????

??????????????? jsonWriter.Formatting = Formatting.Indented;
??????????????? jsonWriter.WriteStartObject();
????????????????
??????????????? jsonWriter.WritePropertyName("CPU");
??????????????? jsonWriter.WriteValue("Intel");
??????????????? jsonWriter.WritePropertyName("PSU");
??????????????? jsonWriter.WriteValue("500W");
??????????????? jsonWriter.WritePropertyName("Drives");

??????????????? jsonWriter.WriteStartArray();
??????????????? jsonWriter.WriteValue("DVD read/writer");
??????????????? jsonWriter.WriteComment("(broken)");
??????????????? jsonWriter.WriteValue("500 gigabyte hard drive");
??????????????? jsonWriter.WriteValue("200 gigabype hard drive");

??????????????? jsonWriter.WriteEndArray();
??????????????? jsonWriter.WriteEndObject();

??????????? }

??????????? Console.WriteLine(sb.ToString());

輸出結果:

{
? "CPU": "Intel",
? "PSU": "500W",
? "Drives": [
??? "DVD read/writer"
??? /*(broken)*/,
??? "500 gigabyte hard drive",
??? "200 gigabype hard drive"
? ]
}

????? //讀操作

???? TextReader txtReader = new StringReader(sb.ToString());
??????????? using (JsonReader jsonReader = new JsonTextReader(txtReader))
??????????? {
??????????????? string readResult = "{\n";
??????????????? while (jsonReader.Read())
??????????????? {
??????????????????? if (jsonReader.TokenType == JsonToken.PropertyName)
??????????????????? {
??????????????????????? readResult += (string)jsonReader.Value + ":";
??????????????????? }
??????????????????? else if (jsonReader.TokenType == JsonToken.String)
??????????????????? {
??????????????????????? readResult += (string)jsonReader.Value + "\n";
??????????????????? }
??????????????????? else if (jsonReader.TokenType == JsonToken.StartArray)
??????????????????? {
??????????????????????? readResult += "[\n";
??????????????????????? while (jsonReader.Read())
??????????????????????? {
??????????????????????????? if (jsonReader.TokenType == JsonToken.EndArray)
??????????????????????????? {
??????????????????????????????? readResult = readResult.Remove(readResult.Length - 2, 1);
??????????????????????????????? readResult += "]\n";
??????????????????????????????? break;
??????????????????????????? }
??????????????????????????? if (jsonReader.TokenType == JsonToken.String)
??????????????????????????????? readResult += (string)jsonReader.Value + ",\n";
??????????????????????????? else if (jsonReader.TokenType == JsonToken.Comment)
??????????????????????????????? readResult += "/*" + (string)jsonReader.Value + "*/,\n";
??????????????????????? }
??????????????????? }
??????????????? }
??????????????? readResult += "}\n";
??????????????? Console.WriteLine(readResult);

???????????? }

2.JTokenReader and JTokenWriter

JTokenReader and JTokenWriter是讀寫Linq to Json對象的,他們存在于Newtonsoft.Json.Linq名字空間中

???????? JObject o = new JObject(
??????????????????????? new JProperty("Name", "ZhangSan"),
??????????????????????? new JProperty("BirthDay", new DateTime(1985, 11, 27)));

??????????? JsonSerializer serializer = new JsonSerializer();
??????????? Person person = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person));
??????????? Console.WriteLine(person.Name);//輸出ZhangSan

posted @ 2011-06-11 15:04 資源收集 閱讀(167) 評論(0)?編輯 Json.Net?學習筆記(二) Linq to Json

using Newtonsoft.Json.Linq;

定義類:

??? public class Product
??? {
??????? public string Name { get; set; }
??????? public DateTime Expiry { get; set; }
??????? public decimal Price { get; set; }
??????? public string[] Sizes { get; set; }
??? }

測試:

??????????? Product product = new Product
??????????? {
??????????????? Name = "Apple",
??????????????? Expiry = new DateTime(2010, 12, 18),
??????????????? Price = 3.99M,
??????????????? Sizes = new string[] { "Small", "Medium", "Large" }
??????????? };

??????????? string serializedJson = JsonConvert.SerializeObject(product);

????????????JObject o = JObject.Parse(serializedJson);
??????????? string name = (string)o["Name"];
??????????? //Apple
??????????? JArray sizes = (JArray)o["Sizes"];
??????????? string smallest = (string)sizes[0];
??????????? Response.Write(name + "," + smallest + "<br/>");//輸出Small
??????????? //SelectToken
??????????? smallest = (string)o.SelectToken("Sizes[0]");
??????????? Response.Write(smallest + "<br/>");//輸出Small
??????????? //SelectToken with Linq
??????????? var sizeLen5 = o["Sizes"].Select(i => (string)i).Where(i => i.Length == 5).ToList<string>();
????????? ?foreach (var size in sizeLen5)
??????????? {
??????????????? Response.Write((string)size+ " <br/>");
??????????? };//輸出Small和Large

注:JArray表示一個Json集合,JObject表示一個Json對象。

posted @ 2011-06-11 15:03 資源收集 閱讀(117) 評論(0)?編輯 Json.Net?學習筆記(一)

使用Newtonsoft.Json這是一個開源的Json.Net庫。

下載地址:http://json.codeplex.com/releases/view/50552。當前版本為 Release 8

從下載到的源代碼中獲取Newtonsoft.Json.Net20.dll,添加到自己的工程中。

using Newtonsoft.Json;

定義類:

?public class Message
??? {
??????? public string Address { get; set; }
??????? [JsonProperty(TypeNameHandling = TypeNameHandling.All)]
??????? public object Body { get; set; }
??? }
??? public class SearchDetails
??? {
??????? public string Query { get; set; }
??????? public string Language { get; set; }
??? }

測試:

?????????? Message message = new Message
??????????? {
??????????????? Address = "http://google.com",
??????????????? Body = new SearchDetails { Query = "Json.Net", Language = "en-us" }
??????????? };
??????????? string jsonMsg = JsonConvert.SerializeObject(message, Formatting.Indented);//Indented表示以縮進形式顯示結果
??????????? System.Diagnostics.Debug.Write(jsonMsg);
??????????? Message deserialized = JsonConvert.DeserializeObject<Message>(jsonMsg);
??????????? SearchDetails searchDetails = (SearchDetails)deserialized.Body;
??????????? Response.Write(searchDetails.Query + "," + searchDetails.Language + "<br/>");

Debug輸出結果格式:

{
? "Address": "http://google.com",
? "Body": {
??? "$type": "TestJsonSerialization.SearchDetails, TestJsonSerialization",
??? "Query": "Json.Net",
??? "Language": "en-us"
? }
}

注:1.JsonProperty標記字段或屬性,用來控制它作為一個Json對象的屬性序列化。

?????? 2.TypeNameHandling 用來為Json序列化指定類型名。它有幾個枚舉值:

MemberDescription
NoneDo not include the .NET type name when serializing types.?
ObjectsInclude the .NET type name when serializing into a JSON object structure.?
ArraysInclude the .NET type name when serializing into a JSON array structure.?
AutoInclude the .NET type name when the type of the object being serialized is not the same as its declared type.?
AllAlways include the .NET type name when serializing.?
上一篇?在ASP.NET MVC 中獲取當前URL、controller、action(轉載)下一篇?ASP.NET-關于Container dataitem 與 eval方法介紹(轉帖)
總結:{ "Address": "http://google.com", "Body": { "$type": "TestJsonSerialization.SearchDetails, TestJsonSerialization", "Query": "Json.Net", "Language": "en-us" }} posted on 2013-09-03 21:43?Alfa 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/wuyifu/p/3299784.html

總結

以上是生活随笔為你收集整理的Json.Net学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲精品88欧美一区二区 | 日韩欧美在线观看一区二区 | 中字幕视频在线永久在线观看免费 | 国产综合91| 91自拍91| 日韩在线精品视频 | 日本中文字幕在线免费观看 | 天堂网av在线 | 97在线超碰| 91av手机在线观看 | 欧美日韩一区二区在线观看 | 免费看三级网站 | 午夜av电影院 | 国产精品手机看片 | 在线视频 你懂得 | 亚洲男模gay裸体gay | 久久免费视频3 | 国产成人精品综合久久久 | 亚洲美女在线国产 | 欧美综合久久 | 欧美极品久久 | 国产精品一区二区在线观看 | 91视频久久久 | 国产精品尤物视频 | 久久综合色婷婷 | 97在线精品视频 | 亚洲精品视频在线观看免费 | 在线观看视频h | 国产成人av | 一区二区三区中文字幕在线 | 免费看黄色大全 | 天天操天天干天天操天天干 | 黄色软件在线观看 | 日本狠狠干 | 国内精品在线看 | 成人黄色小说网 | 亚洲春色成人 | 中文字幕 在线看 | 成人在线视频论坛 | 婷婷精品国产欧美精品亚洲人人爽 | 人人插人人费 | 国产精品日韩在线 | 91天天操 | 久久男人免费视频 | 国产亚洲精品美女久久 | 日韩高清在线一区二区三区 | 国产不卡在线看 | av超碰免费在线 | 久久精品99久久 | 成人免费视频网站 | 视频一区二区在线观看 | 中文字幕在线视频免费播放 | 亚洲成av片人久久久 | 五月天久久狠狠 | 91在线视频免费播放 | 2021av在线| 免费在线成人av | 国产日韩精品视频 | 91视视频在线直接观看在线看网页在线看 | 91探花系列在线播放 | avav99| 欧美视频xxx| 欧美性大胆 | 国产综合在线视频 | 午夜神马福利 | 不卡的av在线播放 | 亚洲黄色精品 | 亚洲精品视频免费观看 | 精品国产人成亚洲区 | 成人作爱视频 | 国产精久久久久久久 | 99精品影视 | 色婷婷视频网 | 国产裸体无遮挡 | av在线短片| 91免费高清视频 | 97av在线视频 | 国产精品美女久久 | 亚洲精品伦理在线 | 国产一级免费播放 | 亚洲一区日韩在线 | 国产国产人免费人成免费视频 | 国产不卡av在线 | 国产在线a不卡 | 亚洲精品字幕在线观看 | 国产999精品久久久影片官网 | 久久a免费视频 | 日韩免费中文 | 久久久久亚洲国产精品 | 天天射天天操天天干 | 久久久久久久久久久成人 | 亚洲精品国产精品国产 | 日韩精品无 | 天天射天天| 久久精品一区二区国产 | 亚洲视频 视频在线 | 国产亚洲精品久久久久久大师 | 亚洲波多野结衣 | 久久一区二区三区超碰国产精品 | 99操视频| 日韩videos高潮hd | 99色人 | 欧美日韩亚洲精品在线 | 成人一级片在线观看 | 亚洲久久视频 | 亚洲午夜精品久久久久久久久久久久 | 黄色精品在线看 | 精品一区二区三区电影 | 中文字幕在线看人 | 在线电影中文字幕 | 日韩二区三区在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 久久精品国产免费观看 | 狠狠干在线 | 99热这里只有精品8 久久综合毛片 | 国产精品第二页 | 最近高清中文在线字幕在线观看 | 中文字幕在线播放一区二区 | 日韩精品影视 | 久久久国产99久久国产一 | 91中文视频 | 久久久久久久久免费视频 | www.神马久久 | 婷婷四房综合激情五月 | 不卡国产视频 | 2023国产精品自产拍在线观看 | 操高跟美女 | 欧美成人精品欧美一级乱黄 | 国产精品亚洲片夜色在线 | 国产涩涩网站 | 精品伦理一区二区三区 | 欧美天天综合网 | 狠狠五月天 | 奇米影视777四色米奇影院 | 国产精品久久99综合免费观看尤物 | 伊人色综合久久天天 | 中文字幕美女免费在线 | 国产午夜精品一区二区三区欧美 | 国产成人精品一区二区在线观看 | 视频国产精品 | 久久午夜色播影院免费高清 | 国产成人精品在线播放 | 99热这里精品 | 国产91综合一区在线观看 | 欧美日韩三级 | 久久不射电影院 | 99视频精品视频高清免费 | 99久久999久久久精玫瑰 | 久久a热6| 在线播放91 | 久久精品国产免费看久久精品 | 国产精品成人久久久 | 国产精品一区二区久久精品爱微奶 | 一区二区激情 | 久久爽久久爽久久av东京爽 | 五月天天在线 | 一级免费黄色 | 精品国产一区二区三区四 | 久久专区 | 黄色大片日本 | 国产1级视频 | 91精品久久香蕉国产线看观看 | 奇米网8888 | 精品一二三区视频 | 亚州性色| 九九久久久久久久久激情 | 婷婷丁香激情综合 | 国产五月 | 欧美与欧洲交xxxx免费观看 | 国产一级二级在线观看 | 91视频在线观看免费 | 国产精品高清在线 | 天天爱天天操 | 五月婷婷狠狠 | 成人免费视频在线观看 | 国产不卡一区二区视频 | av超碰在线观看 | 国产18精品乱码免费看 | 成年人电影毛片 | 国产在线一线 | 一区二区三区在线观看中文字幕 | 在线免费观看的av网站 | 视频在线观看入口黄最新永久免费国产 | 国产精品视频免费看 | 久久亚洲在线 | 国产专区视频在线观看 | 国产精品综合久久久久久 | 久久综合九色综合欧美就去吻 | 中文字幕网站视频在线 | 五月婷婷综合在线视频 | 不卡日韩av | 亚洲综合爱 | 97视频在线观看成人 | 狠狠狠色丁香综合久久天下网 | 亚洲最新av在线 | 伊人永久在线 | 国产在线观看一区 | 精品国自产在线观看 | 91网在线看 | 69av在线播放 | 亚洲视频第一页 | 国产毛片久久 | 国产精品成人久久久 | 探花视频免费观看高清视频 | 在线中文字幕电影 | 69久久久 | 综合激情久久 | 色中文字幕在线观看 | 一区二区三区四区五区在线 | 免费看片网址 | av色图天堂网 | 高清av网站| 日日干夜夜骑 | 婷色在线| 97色婷婷人人爽人人 | 久久久国产精品免费 | 97在线观看免费高清完整版在线观看 | 久久精品久久久精品美女 | 欧美一区二区三区四区夜夜大片 | 色在线视频 | 亚洲成年片 | 欧美日韩国产二区三区 | 91久久人澡人人添人人爽欧美 | 免费看片网址 | 日韩国产欧美在线视频 | 国产黑丝袜在线 | 久久色视频 | 国产中出在线观看 | 超碰97网站 | 中文字幕在线观看视频免费 | 亚洲综合射 | 免费精品在线观看 | 女人高潮特级毛片 | 精品综合久久 | 免费成人短视频 | 久久九九国产视频 | 国产精品综合在线 | 九热精品| av成人免费在线看 | 天天干天天干天天色 | 波多野结衣视频一区 | 四虎影院在线观看av | 国产精品免费视频一区二区 | 亚洲视频在线看 | 五月婷婷开心中文字幕 | 国产精品久久久久久久久蜜臀 | 国产在线黄 | 欧美日韩视频一区二区三区 | 久久精品免费观看 | 久久久久欧美精品999 | 午夜视频不卡 | av在线播放快速免费阴 | 亚洲黄色片一级 | 中文字幕中文字幕在线中文字幕三区 | 国产精品九九九九九 | 国产男女免费完整视频 | 国产第一页精品 | 国产免费av一区二区三区 | 中国成人一区 | 五月天伊人 | 中文国产在线观看 | 久久免费的视频 | 久久www免费视频 | 久久免费视频99 | 日日操天天爽 | 免费看一及片 | 狠狠干狠狠艹 | 日本成人黄色片 | 91在线成人 | 成年人视频免费在线 | 超碰在线98 | 国产精品欧美久久久久天天影视 | 亚洲一级片在线看 | 国产福利免费在线观看 | 久久精品精品电影网 | 久久男人免费视频 | 久草视频在线资源 | 视频一区在线播放 | 九九九电影免费看 | 99免费观看视频 | 在线看污网站 | 久久精品国产99国产 | 国产一级片在线播放 | 日韩成人欧美 | 一级黄色大片在线观看 | 超碰在线人 | 久久激情影院 | 91在线播| 免费进去里的视频 | 黄色一级大片免费看 | 青青草华人在线视频 | 欧美性生活一级片 | 色网站免费在线看 | 欧美另类巨大 | 看片的网址 | 人人澡人人爱 | 国产美女视频免费 | www.黄色小说.com | 国内外成人免费在线视频 | 日本三级大片 | 日日婷婷夜日日天干 | 91av在线免费看 | 亚洲第一区在线观看 | 亚洲电影成人 | 91禁看片 | 四虎视频 | 国产久草在线 | 亚洲国产精品久久久久 | 国产成人免费在线 | 免费三级av | 国产手机在线精品 | 97成人精品视频在线播放 | 丁香五月亚洲综合在线 | 久久久久女教师免费一区 | 国产在线国偷精品产拍免费yy | 日韩电影在线观看中文字幕 | 丁香激情视频 | 97国产大学生情侣白嫩酒店 | 91桃色在线观看视频 | 亚洲一区二区视频在线 | 高清国产午夜精品久久久久久 | 深夜国产福利 | 久久精品这里都是精品 | 美女黄色网在线播放 | 成人精品电影 | 国产色一区 | 久久精品视频国产 | 亚州国产视频 | 青青河边草免费视频 | 全黄色一级片 | 色.www| 片黄色毛片黄色毛片 | 婷婷六月天天 | 久草在线看片 | 午夜私人影院久久久久 | 国产成人精品国内自产拍免费看 | 激情亚洲综合在线 | 国产一区二区中文字幕 | 天天骚夜夜操 | 精品天堂av | 免费成人看片 | 欧美一级艳片视频免费观看 | 超碰97人人干 | 激情久久久 | 久久99精品久久久久久 | 欧美一二三区在线观看 | 黄色www| 久久国产网 | 国产999视频 | 国产精品视频免费在线观看 | 亚洲天堂网在线视频观看 | 日日操日日干 | 日韩中文在线视频 | 国产亚洲午夜高清国产拍精品 | 欧美精品你懂的 | 成人中文字幕+乱码+中文字幕 | 狠狠色丁香婷婷综合 | 黄色小说在线观看视频 | av一区二区在线观看中文字幕 | 久久精品视频2 | 又黄又色又爽 | 天天爽天天碰狠狠添 | 中文av资源站 | 丁香久久激情 | 夜夜操夜夜干 | 亚洲国产精品一区二区久久,亚洲午夜 | 日韩久久午夜一级啪啪 | 久久刺激视频 | 国产亚洲精品久久久久久网站 | 国产精品成人aaaaa网站 | 久久不射影院 | 天天射天天舔天天干 | 日韩视频1区| 欧美日韩激情网 | 久久99亚洲精品 | 91tv国产成人福利 | 日韩一区二区三区在线看 | 九九激情视频 | 国产无遮挡又黄又爽在线观看 | 9ⅰ精品久久久久久久久中文字幕 | 国产精品精品视频 | 久热香蕉视频 | 亚洲免费av片 | 又黄又爽又刺激视频 | 91看片麻豆| 国产黄色片久久 | 亚洲精品一区二区在线观看 | 日韩精品免费一区二区三区 | 久久精品人人做人人综合老师 | 少妇性bbb搡bbb爽爽爽欧美 | 日韩在线视频网址 | 日日爽日日操 | www.天天操.com | 97电院网手机版 | 狠狠干夜夜操天天爽 | 欧美高清视频不卡网 | 久久久久久久国产精品影院 | 免费日韩 | 亚洲视频每日更新 | 国产丝袜一区二区三区 | 亚洲日本精品视频 | 国产精品a久久 | 97网| 在线一二三区 | 去干成人网 | 国产精品一区二区吃奶在线观看 | 国产精品女同一区二区三区久久夜 | 亚洲欧美精品一区 | 色综合久久综合网 | 国产一区国产精品 | 96视频在线| 久久久久免费视频 | 国产精品aⅴ | 黄色电影网站在线观看 | 香蕉影视在线观看 | 日韩大片在线播放 | 天堂视频中文在线 | 天天天天色射综合 | 爱射综合| 手机看片中文字幕 | 国产亚洲视频在线 | 99 视频 高清 | 亚洲婷久久| 在线免费黄网站 | 国产成人精品福利 | 99热9| 99精品在线免费视频 | 91精品国产一区 | 狠狠色噜噜狠狠狠 | 天天干天天草天天爽 | 狠狠色狠狠色综合日日92 | 五月激情久久久 | 香蕉视频最新网址 | 五月婷婷电影网 | 亚洲精品一区二区三区高潮 | 天天色天天综合 | 六月丁香综合 | 婷久久 | av中文字幕在线观看网站 | 啪啪肉肉污av国网站 | 91久久偷偷做嫩草影院 | 久久久国产在线视频 | 夜夜干夜夜 | 国产色婷婷精品综合在线手机播放 | 日韩在线观看第一页 | 综合国产在线 | 99精品99| 欧女人精69xxxxxx | 91视频网址入口 | 亚洲aⅴ免费在线观看 | 久久a久久| 操操操天天操 | 亚洲电影成人 | 国产视频精品免费 | 久久99国产精品久久99 | 国产成a人亚洲精v品在线观看 | 99在线热播精品免费99热 | 成人在线观看影院 | 国产精品片 | 黄色成人影视 | 香蕉久久国产 | wwwwwww黄| 免费在线观看a v | 精品国产乱子伦一区二区 | 午夜色婷婷 | 亚洲激情在线观看 | 日韩精品一区二区三区电影 | 91日韩在线专区 | 亚洲成av人影片在线观看 | 国产黄在线播放 | 亚洲经典在线 | 国产玖玖在线 | 激情在线免费视频 | av免费看在线 | 欧美激情va永久在线播放 | 69精品人人人人 | 国产精品久久久久久久久久久杏吧 | 天天夜夜亚洲 | 精品国产电影一区二区 | 亚洲精品视频在线免费播放 | 四虎永久免费在线观看 | 99re国产视频| 日韩经典一区二区三区 | 97视频在线免费观看 | 久久亚洲私人国产精品va | www四虎影院 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 国产亚洲精品xxoo | 97偷拍在线视频 | 中文字幕在线观看2018 | 激情影音 | 久久欧美视频 | 国产女人40精品一区毛片视频 | 91看片在线观看 | 日本公妇色中文字幕 | 成人免费看视频 | 天天操天天操天天操天天操天天操 | 日韩av中文在线观看 | 成人一级黄色片 | 成人午夜精品久久久久久久3d | 日韩高清不卡在线 | 91福利视频久久久久 | 国产精品成人免费 | 免费在线播放黄色 | 免费国产在线观看 | 成人久久久久久久久 | 精品免费观看 | 免费av大全 | 国产亚洲精品久久久久秋 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 色欧美日韩 | 久久这里只精品 | 91精品成人 | 国产一级视屏 | 中文字幕视频网 | 99久热在线精品视频 | 97人人射 | 欧美日韩精 | 麻豆首页 | 久久精品精品电影网 | 一级免费黄色 | 91片黄在线观看动漫 | 日韩欧美在线国产 | 日韩动漫免费观看高清完整版在线观看 | 99久久久国产精品免费99 | 久久精品电影院 | 亚洲一级影院 | 91在线视频播放 | 国产黄色片久久久 | 国内久久看 | 狠狠色丁香久久婷婷综合丁香 | 国产精品成人一区二区三区 | 天天操天天干天天干 | 99久久精品免费看国产免费软件 | 久久精品精品 | 天天爱av导航| 91精品国产自产在线观看 | 中文字幕一区在线 | 中文字幕最新精品 | 免费又黄又爽视频 | 久久激情五月丁香伊人 | 久久久久久久久久国产精品 | 国产一级片免费播放 | 日韩一级理论片 | 视频成人永久免费视频 | 九九在线播放 | 国产一级视屏 | 四虎国产精品免费观看视频优播 | 午夜久久久精品 | 免费看黄的 | 免费看片色 | 国产中年夫妇高潮精品视频 | 狠狠干激情 | 久久 亚洲视频 | 久久超级碰视频 | 伊人干综合 | 久久午夜网 | 日韩视频一区二区在线 | 亚洲精品婷婷 | 精品少妇一区二区三区在线 | 夜夜视频欧洲 | 日韩高清精品免费观看 | 在线精品在线 | 欧美成天堂网地址 | 亚洲综合一区二区精品导航 | 免费视频 三区 | 日韩欧美大片免费观看 | av在线免费在线 | 天天色天天射天天操 | 手机av在线网站 | 亚洲国产精品久久久久久 | 国产精国产精品 | 超碰97免费观看 | 国产在线小视频 | 日韩网站中文字幕 | 国产成视频在线观看 | 婷婷丁香久久五月婷婷 | 亚洲日本激情 | av午夜电影 | 黄色特级片 | 九九久| 91av视频网站| 日韩成年视频 | 久久资源在线 | 欧美激情h | 久久免费国产视频 | 免费久草视频 | 欧美一级电影在线观看 | 人人添人人澡 | 丁香六月婷 | 在线观影网站 | 91.精品高清在线观看 | 亚洲视频2 | 男女视频91 | 国内精品小视频 | 国产高清在线观看 | 精品国产免费人成在线观看 | 成人国产一区 | 免费观看av网站 | 久久久久久久久久久久影院 | 成人a大片 | 在线一级片 | 国产精品激情偷乱一区二区∴ | 99在线观看精品 | 波多野结衣在线播放一区 | 在线免费观看黄色 | 成人av免费网站 | 欧美成人免费在线 | 亚洲九九精品 | 免费黄色网址大全 | 国产日韩欧美在线看 | 国产精品一区二区美女视频免费看 | 在线播放 亚洲 | 日韩高清在线一区二区 | 国产精品18久久久久久久久久久久 | 亚洲三级性片 | 天天天天综合 | 亚洲综合激情小说 | 国产日韩视频在线播放 | 热久久影视 | 丝袜美腿在线视频 | 久久婷婷五月综合色丁香 | 欧美精品久久久久久久久久丰满 | 日本精品视频在线观看 | 亚洲成人国产 | 久久久久国产精品www | 亚洲精品午夜久久久 | 亚洲精品在线观看的 | 精品福利av| 精品国产一区二区在线 | 一区二区三区在线免费 | 五月婷久 | 日本中文在线播放 | 日韩在线观看一区二区 | 国产在线成人 | 青草视频免费观看 | 在线中文字幕观看 | 国产成人精品av在线 | 四虎影视精品 | 亚洲国产丝袜在线观看 | www五月天 | 93久久精品日日躁夜夜躁欧美 | 久碰视频在线观看 | 久久久精品二区 | 久久y | 日韩有码专区 | 国产资源在线视频 | 亚洲精品美女在线 | 欧美日韩免费在线视频 | 久久久精品影视 | 久久毛片高清国产 | 91免费视频网站在线观看 | 国产又粗又硬又长又爽的视频 | 日韩成人中文字幕 | 天天射天天操天天干 | 99久久精品免费看国产 | 青青草国产成人99久久 | 国产三级精品在线 | 免费观看mv大片高清 | 国产精品爽爽爽 | 91精品国产欧美一区二区成人 | 国产精品久久久久久麻豆一区 | 激情亚洲综合在线 | 久二影院 | www狠狠 | 国产美女无遮挡永久免费 | 97超碰中文| 国产精品久久久久久久久久免费看 | 日韩欧美视频在线观看免费 | 亚洲 中文 在线 精品 | 国产精品久久久久久久妇 | 精品久久91| 欧美精品在线观看免费 | 久久草av | av一级片网站 | 中文字幕免费不卡视频 | 欧美久久成人 | 97超碰伊人 | 黄色片免费电影 | 91麻豆.com| 狠狠操.com| 精品毛片久久久久久 | 国产经典 欧美精品 | 国产精品 日韩精品 | 免费高清在线视频一区· | 九月婷婷综合网 | 久久久久夜色 | 精品伦理一区二区三区 | 视频二区在线 | 91禁在线观看 | 麻豆久久久 | 热久久这里只有精品 | 日日精品| japanesefreesex中国少妇 | 中文字幕韩在线第一页 | 成人中文字幕+乱码+中文字幕 | 在线观看黄网 | 九色视频自拍 | 天天射射天天 | 国产精品永久久久久久久久久 | 国产美女精品人人做人人爽 | 天堂av色婷婷一区二区三区 | 久草在在线 | 天天干视频在线 | 日韩网站免费观看 | 在线播放 日韩专区 | 午夜精品一区二区三区四区 | 日韩av成人免费看 | 欧美日韩伦理在线 | 色婷婷成人网 | 欧洲一区二区在线观看 | 欧美精品在线观看一区 | 亚洲视频高清 | 久久免费视频这里只有精品 | 激情欧美丁香 | 亚洲 欧洲av| 婷婷丁香六月天 | 99精品色 | 亚洲午夜小视频 | av免费在线网站 | 国产999久久久 | 天天做天天看 | 91精品国产三级a在线观看 | 综合色在线观看 | 久久综合网色—综合色88 | 在线v片免费观看视频 | 国产精品6999成人免费视频 | 亚洲精品久久久久久久蜜桃 | 成人影视片 | 亚洲成人精品久久久 | 亚洲 综合 激情 | 中文字幕av免费在线观看 | 永久免费精品视频网站 | 在线免费观看的av网站 | 日日夜夜狠狠干 | 亚洲国产精品资源 | 中文字幕在线免费观看 | 国产高清福利在线 | 久久久久一区二区三区四区 | 成人丝袜 | 久久久久久久久久久网 | 亚洲精品在线看 | 国产成人一区在线 | 国产字幕在线看 | 91精品国产成人www | 久久蜜臀av | 久久久久久久久影视 | 黄色片网站大全 | 99视频精品免费视频 | 一级片视频在线 | 在线观看免费一级片 | 在线观看视频福利 | 美腿丝袜一区二区三区 | 久久综合亚洲鲁鲁五月久久 | 五月综合在线观看 | av在线等 | www.色五月.com| 波多野结衣在线中文字幕 | 丁香视频在线观看 | 国产精品视频线看 | 91av电影在线观看 | 久久国产精品视频观看 | 在线观看日韩专区 | 亚洲精品乱码久久久久v最新版 | 日本精品一区二区 | 天天爱综合 | 亚洲一区美女视频在线观看免费 | 人人爽人人爽 | 国产精品久久久久免费 | 欧美日韩在线观看视频 | 国产精品中文字幕在线观看 | 免费av看片| 美女视频免费一区二区 | 久久中文字幕视频 | 干av在线 | 高清国产午夜精品久久久久久 | 黄色成人影视 | 国产精品久久 | 在线电影a | 最近免费中文字幕大全高清10 | 美女在线国产 | 日韩一区正在播放 | 国产在线观看免 | 麻豆视频国产 | 综合色天天 | 久久99精品久久久久久久久久久久 | 日本三级香港三级人妇99 | 91天堂影院| a视频免费在线观看 | 日本久久久精品视频 | 日韩精品视频免费 | 狠狠狠狠干 | 91精品国产91久久久久久三级 | 一区二区伦理电影 | 美女视频黄色免费 | 97成人在线视频 | 国产精品毛片一区二区三区 | 久草色在线观看 | 色综合久久久久久中文网 | 麻豆影视网| 日本中文字幕电影在线免费观看 | 天天爱天天操 | 黄色大片入口 | 天天射天天操天天干 | 成人羞羞视频在线观看免费 | 欧美一区成人 | 精品在线一区二区 | 中文伊人 | 日韩性网站| 国产色中涩 | 91麻豆福利 | 精品黄色在线观看 | 成人免费大片黄在线播放 | 国产九九在线 | 麻豆视频国产精品 | 国产伦精品一区二区三区照片91 | 免费看成人a| 精品免费一区二区三区 | 91av蜜桃| 国内久久久久久 | 成年人黄色av| 日韩女同一区二区三区在线观看 | 九色自拍视频 | 人人爽人人爽 | 色偷偷网站视频 | 91福利小视频| 亚洲精品日韩av | 91精品国产一区二区在线观看 | 99久久99视频只有精品 | 国产视频在线观看免费 | 91片网 | 亚洲国产中文字幕在线 | 五月婷香 | 天天操夜夜操夜夜操 | 欧美先锋影音 | 天天摸天天操天天爽 | 午夜久久网| 亚洲涩涩色| 在线观看播放av | 国产精品自在线 | 精品一区免费 | 国产一区电影在线观看 | 天天插天天操天天干 | 一区二区三区在线观看中文字幕 | 中文字幕中文字幕中文字幕 | 99日精品 | 国产精品久久久久久一区二区 | 丁香激情综合久久伊人久久 | 精品国内 | 国产精品尤物视频 | 精品国产诱惑 | 日韩aⅴ视频 | 欧美精品在线一区二区 | 国产午夜在线观看视频 | 国产精品亚洲a | 国产精选在线观看 | 免费看片成年人 | 色综合a | 国产99精品在线观看 | 日韩av手机在线观看 | 久青草视频在线观看 | 色综合咪咪久久网 | 久久手机精品视频 | 亚洲撸撸 | 久久成电影 | 国产精品久久久久久模特 | 超碰97人人爱 | 天堂在线一区 | 免费av片在线| 久久精品电影院 | 99免费在线播放99久久免费 | a√天堂资源 | 欧美日韩精品在线观看视频 | 成片视频免费观看 | 九九涩涩av台湾日本热热 | 日韩美精品视频 | 亚洲开心色 | 国产精品久久久久久久久久免费 | 久久九九久久 | 日韩精品一区二区三区不卡 | 在线直播av| 亚洲免费永久精品国产 | 96久久久 | 日日干日日 | 美女久久久久久久久久久 | 狠狠色丁香婷婷综合 | 西西444www大胆高清图片 | 国产精品乱码在线 | 2023天天干 | 日韩免费一区二区在线观看 | 国产精品99久久久久久宅男 | 免费看一级片 | 成人毛片一区 | 一区二区三区韩国免费中文网站 | 国产成人亚洲在线电影 | 国内精品久久久久久中文字幕 | 五月天婷婷在线观看视频 | 欧美精品亚洲精品 | 免费在线观看91 | 国产黄色特级片 | 麻豆精品视频在线观看免费 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 91亚洲精品久久久久图片蜜桃 | 开心色婷婷| 91久久久久久久一区二区 | 色综合色综合久久综合频道88 | 在线观看91久久久久久 | 久久国际影院 | 亚洲 欧美 另类人妖 | 久久视频在线观看 | 很黄很污的视频网站 | 免费在线观看一区 | 免费av网址在线观看 | 成人av一二三区 | 亚洲国产日韩欧美在线 | 成人久久免费 | 久久免费国产精品1 | 久久久久亚洲精品中文字幕 | 婷婷精品国产欧美精品亚洲人人爽 | 中日韩在线视频 | 美女网站视频免费都是黄 | 综合网在线视频 | 黄色视屏av | 中文字幕在线看视频 | 欧美日韩一区二区三区视频 | 久久超碰99 | 国产一区二区高清视频 | 少妇视频一区 | 亚洲国产欧美在线看片xxoo | 中文字幕 国产精品 | 国际精品久久久久 | 日韩视频二区 | 麻豆一区在线观看 | 91麻豆精品国产自产在线游戏 | 在线观看亚洲精品 | 免费在线观看av电影 | 欧美日韩久久久 | 99久久精品国产亚洲 | 精品免费观看视频 | 国产一级二级三级在线观看 | 久草在线99 | 免费91麻豆精品国产自产在线观看 | 亚洲精品国产自产拍在线观看 | 丁香综合五月 | 亚洲专区视频在线观看 | 日韩成年视频 | 国产久草在线 | 亚洲精品久久久久久国 | 美女在线观看av | 狠狠的日 | www.夜夜| 国产在线欧美日韩 | 天天爽夜夜操 | 亚洲国产视频网站 | 日韩免费视频观看 | 亚洲夜夜综合 | 99色 | 婷婷久久一区二区三区 | 亚洲国产成人在线 | 久久精品99国产国产 | 国产色视频123区 | 韩国一区二区在线观看 | 国产视频一区二区在线播放 | 麻豆视频在线免费观看 | 久久艹中文字幕 | 久久久久久久久久久久99 | 国产精品区在线观看 | 久久久人人爽 | a成人v | 婷婷av电影 | 少妇性xxx | 综合网久久 | 日韩在线视频网址 | 视频在线一区 | 日韩中文在线观看 | 91在线国产观看 | 亚洲视屏在线播放 | 91久久丝袜国产露脸动漫 | 狠狠网| 精品一区二区三区电影 | 欧美精品视 | 婷婷久久综合网 | 婷婷网站天天婷婷网站 | 欧美激情另类文学 | 欧美日韩免费观看一区=区三区 | 亚洲精品在线观 | 久久久综合电影 | 久久久黄色免费网站 | 亚洲成人动漫在线观看 | 欧美日韩免费在线观看视频 | 国产成人精品一区二区 | 免费福利在线播放 | 国产偷v国产偷∨精品视频 在线草 | 成人精品电影 | 免费看黄在线看 | 黄色在线观看免费网站 | 少妇激情久久 | 天堂久色 |