Json.NET使用入门(三)【设置】
来源:互联网 发布:金蝶网络破解版 编辑:程序博客网 时间:2024/06/08 02:17
无论人生经历了什么都要明白,我们既不是最幸运的也不是最不幸的,因为我们所经历的有人早已体会,有人正在经历,有人即将面对,仅此而已。在人生低谷时谨记:我们并不是唯一面对这种处境的人,但却是唯一可以帮助自己真正走出来的人。只要向着阳光前行,办法总会比困难多。
各种相关辅助类:
public class AutofacContractResolver : DefaultContractResolver { private readonly IContainer _container; public AutofacContractResolver(IContainer container) { _container = container; } protected override JsonObjectContract CreateObjectContract(Type objectType) { JsonObjectContract contract = base.CreateObjectContract(objectType); // use Autofac to create types that have been registered with it if (_container.IsRegistered(objectType)) { contract.DefaultCreator = () => _container.Resolve(objectType); } return contract; } } public class TaskController { //private readonly ITaskRepository _repository; //private readonly ILogger _logger; //public TaskController(ITaskRepository repository, ILogger logger) //{ // _repository = repository; // _logger = logger; //} //public ITaskRepository Repository //{ // get { return _repository; } //} //public ILogger Logger //{ // get { return _logger; } //} }
public class DynamicContractResolver : DefaultContractResolver { private readonly char _startingWithChar; public DynamicContractResolver(char startingWithChar) { _startingWithChar = startingWithChar; } protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { IList<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; } } public class Person { public string FirstName { get; set; } public string LastName { get; set; } public string FullName { get { return FirstName + " " + LastName; } } }
public class KeysJsonConverter : JsonConverter { private readonly Type[] _types; public KeysJsonConverter(params Type[] types) { _types = types; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { JToken t = JToken.FromObject(value); if (t.Type != JTokenType.Object) { t.WriteTo(writer); } else { JObject o = (JObject)t; IList<string> propertyNames = o.Properties().Select(p => p.Name).ToList(); o.AddFirst(new JProperty("Keys", new JArray(propertyNames))); o.WriteTo(writer); } } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter."); } public override bool CanRead { get { return false; } } public override bool CanConvert(Type objectType) { return _types.Any(t => t == objectType); } } public class Employee { public string FirstName { get; set; } public string LastName { get; set; } public IList<string> Roles { get; set; } }
public class KnownTypesBinder : SerializationBinder { public IList<Type> KnownTypes { get; set; } public override Type BindToType(string assemblyName, string typeName) { return KnownTypes.SingleOrDefault(t => t.Name == typeName); } public override void BindToName(Type serializedType, out string assemblyName, out string typeName) { assemblyName = null; typeName = serializedType.Name; } } public class Car { public string Maker { get; set; } public string Model { get; set; } }
public class NLogTraceWriter : ITraceWriter { private static readonly Logger Logger = LogManager.GetLogger("NLogTraceWriter"); public TraceLevel LevelFilter { // trace all messages. nlog can handle filtering get { return TraceLevel.Verbose; } } public void Trace(TraceLevel level, string message, Exception ex) { LogEventInfo logEvent = new LogEventInfo { Message = message, Level = GetLogLevel(level), Exception = ex }; // log Json.NET message to NLog Logger.Log(logEvent); } private LogLevel GetLogLevel(TraceLevel level) { switch (level) { case TraceLevel.Error: return LogLevel.Error; case TraceLevel.Warning: return LogLevel.Warn; case TraceLevel.Info: return LogLevel.Info; case TraceLevel.Off: return LogLevel.Off; default: return LogLevel.Trace; } } }
public class UserConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { User user = (User) value; writer.WriteValue(user.UserName); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { User user = new User(); user.UserName = (string) reader.Value; return user; } public override bool CanConvert(Type objectType) { return objectType == typeof (User); } } [JsonConverter(typeof (UserConverter))] public class User { public string UserName { get; set; } }
First.aspx内容:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="First.aspx.cs" Inherits="NewtonsoftDemo.First" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td> <asp:Button ID="btnCustomJsonConverter" runat="server" Text="自定义 JsonConverter" OnClick="btnCustomJsonConverter_Click" /> </td> <td> <asp:Button ID="btnCustomIContractResolver" runat="server" Text="自定义 IContractResolver" OnClick="btnCustomIContractResolver_Click" style="height: 27px" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnCustomITraceWriter" runat="server" Text="自定义 ITraceWriter" OnClick="btnCustomITraceWriter_Click" /> </td> <td> <asp:Button ID="btnCustomSerializationBinder" runat="server" Text="自定义 SerializationBinder" OnClick="btnCustomSerializationBinder_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnJsonConstructorAttribute" runat="server" Text="JsonConstructorAttribute" OnClick="btnJsonConstructorAttribute_Click" /> </td> <td> <asp:Button ID="btnJsonConverterAttributeOnclass" runat="server" Text="JsonConverterAttribute在类上" OnClick="btnJsonConverterAttributeOnclass_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnJsonConverterAttributeOnProperty" runat="server" Text="JsonConverterAttribute在属性上" OnClick="btnJsonConverterAttributeOnProperty_Click" /> </td> <td> <asp:Button ID="btnJsonObjectAttributeOptin" runat="server" Text="JsonObjectAttribute选择序列化" OnClick="btnJsonObjectAttributeOptin_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnJsonObjectAttributeForceOs" runat="server" Text="JsonObjectAttribute强行对象序列化" OnClick="btnJsonObjectAttributeForceOs_Click" /> </td> <td> <asp:Button ID="btnJsonPropertyAttributeName" runat="server" Text="JsonPropertyAttribute|name" OnClick="btnJsonPropertyAttributeName_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnJsonPropertyAttributeOrder" runat="server" Text="JsonPropertyAttribute|order" OnClick="btnJsonPropertyAttributeOrder_Click" /> </td> <td> <asp:Button ID="btnJsonPropertyAttributeRequired" runat="server" Text="JsonPropertyAttribute|required" OnClick="btnJsonPropertyAttributeRequired_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnJsonPropertyAttributeItemsSetting" runat="server" Text="JsonPropertyAttribute items 设置" OnClick="btnJsonPropertyAttributeItemsSetting_Click" /> </td> <td> <asp:Button ID="btnJsonPropertyAttributeProSetting" runat="server" Text="JsonPropertyAttribute property 设置" OnClick="btnJsonPropertyAttributeProSetting_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnJsonIgnoreAttribute" runat="server" Text="JsonIgnoreAttribute" OnClick="btnJsonIgnoreAttribute_Click" /> </td> <td> <asp:Button ID="btnErrorHandlingAttribute" runat="server" Text="ErrorHandlingAttribute" OnClick="btnErrorHandlingAttribute_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnDefaultValueAttribute" runat="server" Text="DefaultValueAttribute" OnClick="btnDefaultValueAttributeg_Click" /> </td> <td> <asp:Button ID="btnSerializationCallbackAttributes" runat="server" Text="序列化回调属性" OnClick="btnSerializationCallbackAttributes_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnDataContractAndDataMemberAttribute" runat="server" Text="DataContract和DataMember属性" OnClick="btnDataContractAndDataMemberAttributes_Click" /> </td> <td> <asp:Button ID="btnDeserializeWithDI" runat="server" Text="依赖注入反序列化" OnClick="btnDeserializeWithDI_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnSerializeWithDefaultSettings" runat="server" Text="用默认设置序列化" OnClick="btnSerializeWithDefaultSettings_Click" /> </td> <td> <asp:Button ID="btnSerializeImmutableCollection" runat="server" Text="序列化不可变集合" OnClick="btnSerializeImmutableCollection_Click" /><br /> </td> </tr> <tr> <td> <asp:Button ID="btnDeserializeImmutableCollection" runat="server" Text="反序列化不可变集合" OnClick="btnDeserializeImmutableCollection_Click" /> </td> <td> <asp:Button ID="btnSerializeExtensionData" runat="server" Text="序列化扩展数据" OnClick="btnSerializeExtensionData_Click" /> </td> </tr> <tr> <td> <asp:Button ID="btnDeserializeExtensionData" runat="server" Text="反序列化扩展数据" OnClick="btnDeserializeExtensionData_Click" /> </td> <td> <asp:Button ID="btnDeserializeDateFormatString" runat="server" Text="反序列化日期格式字符串" OnClick="btnDeserializeDateFormatString_Click" /> </td> </tr> <tr> <td> <asp:Button ID="btnSerializeDateFormatString" runat="server" Text="序列化日期格式字符串" OnClick="btnSerializeDateFormatString_Click" /> </td> <td> </td> </tr> </table> </div> </form> </body></html>
First.aspx.cs代码:
public partial class First : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnCustomJsonConverter_Click(object sender, EventArgs e) { Employee employee = new Employee { FirstName = "James", LastName = "Newton-King", Roles = new List<string> { "Admin" } }; string json = JsonConvert.SerializeObject(employee, Formatting.Indented, new KeysJsonConverter(typeof (Employee))); Response.Write(json); Employee newEmployee = JsonConvert.DeserializeObject<Employee>(json, new KeysJsonConverter(typeof (Employee))); Response.Write(newEmployee.FirstName); } protected void btnCustomIContractResolver_Click(object sender, EventArgs e) { Person person = new Person { FirstName = "Dennis", LastName = "Deepwater-Diver" }; string startingWithF = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings {ContractResolver = new DynamicContractResolver('F')}); Response.Write(startingWithF); string startingWithL = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings {ContractResolver = new DynamicContractResolver('L')}); Response.Write(startingWithL); } protected void btnCustomITraceWriter_Click(object sender, EventArgs e) { IList<string> countries = new List<string> { "New Zealand", "Australia", "Denmark", "China" }; string json = JsonConvert.SerializeObject(countries, Formatting.Indented, new JsonSerializerSettings { TraceWriter = new NLogTraceWriter() }); Response.Write(json); } protected void btnCustomSerializationBinder_Click(object sender, EventArgs e) { KnownTypesBinder knownTypesBinder = new KnownTypesBinder { KnownTypes = new List<Type> {typeof (Car)} }; Car car = new Car { Maker = "Ford", Model = "Explorer" }; string json = JsonConvert.SerializeObject(car, Formatting.Indented, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, Binder = knownTypesBinder }); Response.Write(json); // { // "$type": "Car", // "Maker": "Ford", // "Model": "Explorer" // } object newValue = JsonConvert.DeserializeObject(json, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, Binder = knownTypesBinder }); Response.Write(newValue.GetType().Name); // Car } protected void btnJsonConstructorAttribute_Click(object sender, EventArgs e) { string json = @"{ ""UserName"": ""domain\\username"", ""Enabled"": true }"; User user = JsonConvert.DeserializeObject<User>(json); Response.Write(user.UserName); // domain\username } protected void btnJsonConverterAttributeOnclass_Click(object sender, EventArgs e) { User user = new User { UserName = @"domain\username" }; string json = JsonConvert.SerializeObject(user, Formatting.Indented); Response.Write(json); // "domain\\username" } protected void btnJsonConverterAttributeOnProperty_Click(object sender, EventArgs e) { UserEntity user = new UserEntity { UserName = @"domain\username", Status = UserStatus.Deleted }; string json = JsonConvert.SerializeObject(user, Formatting.Indented); Response.Write(json); } protected void btnJsonObjectAttributeOptin_Click(object sender, EventArgs e) { FileOp file = new FileOp { Id = Guid.NewGuid(), Name = "ImportantLegalDocuments.docx", Size = 50*1024 }; string json = JsonConvert.SerializeObject(file, Formatting.Indented); Response.Write(json); } protected void btnJsonObjectAttributeForceOs_Click(object sender, EventArgs e) { DirectoryEntity directory = new DirectoryEntity { Name = "My Documents", Files = { "ImportantLegalDocuments.docx", "WiseFinancalAdvice.xlsx" } }; string json = JsonConvert.SerializeObject(directory, Formatting.Indented); Response.Write(json); } protected void btnJsonPropertyAttributeName_Click(object sender, EventArgs e) { Videogame starcraft = new Videogame { Name = "Starcraft", ReleaseDate = new DateTime(1998, 1, 1) }; string json = JsonConvert.SerializeObject(starcraft, Formatting.Indented); Response.Write(json); } protected void btnJsonPropertyAttributeOrder_Click(object sender, EventArgs e) { AccountData account = new AccountData { FullName = "Aaron Account", EmailAddress = "aaron@example.com", Deleted = true, DeletedDate = new DateTime(2013, 1, 25), UpdatedDate = new DateTime(2013, 1, 25), CreatedDate = new DateTime(2010, 10, 1) }; string json = JsonConvert.SerializeObject(account, Formatting.Indented); Response.Write(json); } protected void btnJsonPropertyAttributeRequired_Click(object sender, EventArgs e) { string json = @"{ 'Name': 'Starcraft III', 'ReleaseDate': null }"; Videogame starcraft = JsonConvert.DeserializeObject<Videogame>(json); Response.Write(starcraft.Name); // Starcraft III Response.Write(starcraft.ReleaseDate); // null } protected void btnJsonPropertyAttributeItemsSetting_Click(object sender, EventArgs e) { EmployeeInfo manager = new EmployeeInfo { Name = "George-Michael" }; EmployeeInfo worker = new EmployeeInfo { Name = "Maeby", Manager = manager }; BusinessModel business = new BusinessModel { Name = "Acme Ltd.", Employees = new List<EmployeeInfo> { manager, worker } }; string json = JsonConvert.SerializeObject(business, Formatting.Indented); Response.Write(json); } protected void btnJsonPropertyAttributeProSetting_Click(object sender, EventArgs e) { Vessel vessel = new Vessel { Name = "Red October", Class = "Typhoon" }; string json = JsonConvert.SerializeObject(vessel, Formatting.Indented); Response.Write(json); } protected void btnJsonIgnoreAttribute_Click(object sender, EventArgs e) { AccountEntity account = new AccountEntity { FullName = "Joe User", EmailAddress = "joe@example.com", PasswordHash = "VHdlZXQgJ1F1aWNrc2lsdmVyJyB0byBASmFtZXNOSw==" }; string json = JsonConvert.SerializeObject(account); Response.Write(json); } protected void btnErrorHandlingAttribute_Click(object sender, EventArgs e) { EmployeeData person = new EmployeeData { Name = "George Michael Bluth", Age = 16, Roles = null, Title = "Mister Manager" }; string json = JsonConvert.SerializeObject(person, Formatting.Indented); Response.Write(json); } protected void btnDefaultValueAttributeg_Click(object sender, EventArgs e) { Customer customer = new Customer(); string jsonIncludeDefaultValues = JsonConvert.SerializeObject(customer, Formatting.Indented); Response.Write(jsonIncludeDefaultValues); string jsonIgnoreDefaultValues = JsonConvert.SerializeObject(customer, Formatting.Indented, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore }); Response.Write(jsonIgnoreDefaultValues); } protected void btnSerializationCallbackAttributes_Click(object sender, EventArgs e) { SerializationEventTestObject obj = new SerializationEventTestObject(); Response.Write(obj.Member1); // 11 Response.Write(obj.Member2); // Hello World! Response.Write(obj.Member3); // This is a nonserialized value Response.Write(obj.Member4); // null string json = JsonConvert.SerializeObject(obj, Formatting.Indented); // { // "Member1": 11, // "Member2": "This value went into the data file during serialization.", // "Member4": null // } Response.Write(obj.Member1); // 11 Response.Write(obj.Member2); // This value was reset after serialization. Response.Write(obj.Member3); // This is a nonserialized value Response.Write(obj.Member4); // null obj = JsonConvert.DeserializeObject<SerializationEventTestObject>(json); Response.Write(obj.Member1); // 11 Response.Write(obj.Member2); // This value went into the data file during serialization. Response.Write(obj.Member3); // This value was set during deserialization Response.Write(obj.Member4); // This value was set after deserialization. } protected void btnDataContractAndDataMemberAttributes_Click(object sender, EventArgs e) { FileEntity file = new FileEntity { Id = Guid.NewGuid(), Name = "ImportantLegalDocuments.docx", Size = 50*1024 }; string json = JsonConvert.SerializeObject(file, Formatting.Indented); Response.Write(json); } protected void btnDeserializeWithDI_Click(object sender, EventArgs e) { } protected void btnSerializeWithDefaultSettings_Click(object sender, EventArgs e) { // settings will automatically be used by JsonConvert.SerializeObject/DeserializeObject JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Formatting = Formatting.Indented, ContractResolver = new CamelCasePropertyNamesContractResolver() }; //Staff s = new Staff //{ // FirstName = "Eric", // LastName = "Example", // BirthDate = new DateTime(1980, 4, 20, 0, 0, 0, DateTimeKind.Utc), // Department = "IT", // JobTitle = "Web Dude" //}; //json = JsonConvert.SerializeObject(s); } protected void btnSerializeImmutableCollection_Click(object sender, EventArgs e) { //ImmutableList<string> l = ImmutableList.CreateRange(new List<string> //{ // "One", // "II", // "3" //}); //string json = JsonConvert.SerializeObject(l, Formatting.Indented); } protected void btnDeserializeImmutableCollection_Click(object sender, EventArgs e) { string json = @"[ 'One', 'II', '3' ]"; //ImmutableList<string> l = JsonConvert.DeserializeObject<ImmutableList<string>>(json); //foreach (string s in l) //{ // Response.Write(s); //} } protected void btnSerializeExtensionData_Click(object sender, EventArgs e) { string json = @"{ 'HourlyRate': 150, 'Hours': 40, 'TaxRate': 0.125 }"; //CustomerInvoice invoice = JsonConvert.DeserializeObject<CustomerInvoice>(json); //// increase tax to 15% //invoice.TaxRate = 0.15m; //string result = JsonConvert.SerializeObject(invoice); } protected void btnSerializeDateFormatString_Click(object sender, EventArgs e) { IList<DateTime> dateList = new List<DateTime> { new DateTime(2009, 12, 7, 23, 10, 0, DateTimeKind.Utc), new DateTime(2010, 1, 1, 9, 0, 0, DateTimeKind.Utc), new DateTime(2010, 2, 10, 10, 0, 0, DateTimeKind.Utc) }; string json = JsonConvert.SerializeObject(dateList, new JsonSerializerSettings { DateFormatString = "d MMMM, yyyy", Formatting = Formatting.Indented }); Response.Write(json); } protected void btnDeserializeDateFormatString_Click(object sender, EventArgs e) { string json = @"[ '7 December, 2009', '1 January, 2010', '10 February, 2010' ]"; IList<DateTime> dateList = JsonConvert.DeserializeObject<IList<DateTime>>(json, new JsonSerializerSettings { DateFormatString = "d MMMM, yyyy" }); foreach (DateTime dateTime in dateList) { Response.Write(dateTime.ToLongDateString()); } } protected void btnDeserializeExtensionData_Click(object sender, EventArgs e) { string json = @"{ 'DisplayName': 'John Smith', 'SAMAccountName': 'contoso\\johns' }"; DirectoryAccount account = JsonConvert.DeserializeObject<DirectoryAccount>(json); Response.Write(account.DisplayName); // John Smith Response.Write(account.Domain); // contoso Response.Write(account.UserName); // johns } } #region JsonConstructorAttribute所需实体类 public class User { [JsonConverter(typeof (UserConverter))] public string UserName { get; set; } public bool Enabled { get; private set; } public User() { } [JsonConstructor] public User(string userName, bool enabled) { UserName = userName; Enabled = enabled; } } #endregion #region JsonConverterAttributeOnProperty所需实体类 public enum UserStatus { NotConfirmed, Active, Deleted } public class UserEntity { public string UserName { get; set; } [JsonConverter(typeof (StringEnumConverter))] public UserStatus Status { get; set; } } #endregion #region JsonObjectAttributeOptin所需实体类 [JsonObject(MemberSerialization.OptIn)] public class FileOp { // excluded from serialization // does not have JsonPropertyAttribute public Guid Id { get; set; } [JsonProperty] public string Name { get; set; } [JsonProperty] public int Size { get; set; } } #endregion #region JsonObjectAttribute Force Object Serialization所需实体类 [JsonObject] public class DirectoryEntity : IEnumerable<string> { public string Name { get; set; } public IList<string> Files { get; set; } public DirectoryEntity() { Files = new List<string>(); } public IEnumerator<string> GetEnumerator() { return Files.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } #endregion #region JsonPropertyAttribute name所需实体类 public class Videogame { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("release_date")] public DateTime ReleaseDate { get; set; } } #endregion #region JsonPropertyAttribute order所需实体类 public class AccountData { public string EmailAddress { get; set; } // appear last [JsonProperty(Order = 1)] public bool Deleted { get; set; } [JsonProperty(Order = 2)] public DateTime DeletedDate { get; set; } public DateTime CreatedDate { get; set; } public DateTime UpdatedDate { get; set; } // appear first [JsonProperty(Order = -2)] public string FullName { get; set; } } #endregion #region JsonPropertyAttribute name所需实体类 public class PS4game { [JsonProperty(Required = Required.Always)] public string Name { get; set; } [JsonProperty(Required = Required.AllowNull)] public DateTime? ReleaseDate { get; set; } } #endregion #region JsonPropertyAttribute items所需实体类 public class BusinessModel { public string Name { get; set; } [JsonProperty(ItemIsReference = true)] public IList<EmployeeInfo> Employees { get; set; } } public class EmployeeInfo { public string Name { get; set; } [JsonProperty(IsReference = true)] public EmployeeInfo Manager { get; set; } } #endregion #region JsonPropertyAttribute property 所需实体类 public class Vessel { public string Name { get; set; } public string Class { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public DateTime? LaunchDate { get; set; } } #endregion #region JsonIgnoreAttribute 所需实体类 public class AccountEntity { public string FullName { get; set; } public string EmailAddress { get; set; } [JsonIgnore] public string PasswordHash { get; set; } } #endregion #region ErrorHandlingAttribute所需实体类 public class EmployeeData { 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; } } #endregion #region DefaultValueAttribute所需实体类 public class Customer { public string FirstName { get; set; } public string LastName { get; set; } [DefaultValue(" ")] public string FullName { get { return FirstName + " " + LastName; } } } #endregion #region SerializationEventTestObject所需实体类 public class SerializationEventTestObject { // 2222 // 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."; } } #endregion #region DataContract and DataMember Attributes所需实体类 [DataContract] public class FileEntity { // excluded from serialization // does not have DataMemberAttribute public Guid Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] public int Size { get; set; } } #endregion #region Deserialize ExtensionData所需实体类 public class DirectoryAccount { // normal deserialization public string DisplayName { get; set; } // these properties are set in OnDeserialized public string UserName { get; set; } public string Domain { get; set; } [JsonExtensionData] private IDictionary<string, JToken> _additionalData; [OnDeserialized] private void OnDeserialized(StreamingContext context) { // SAMAccountName is not deserialized to any property // and so it is added to the extension data dictionary string samAccountName = (string) _additionalData["SAMAccountName"]; Domain = samAccountName.Split('\\')[0]; UserName = samAccountName.Split('\\')[1]; } public DirectoryAccount() { _additionalData = new Dictionary<string, JToken>(); } } #endregion
结果如图:
0 0
- Json.NET使用入门(三)【设置】
- MyBatis.Net使用入门(三)
- Quartz.net使用入门(三)
- Json.NET使用入门(一)【序列化】
- Json.NET使用入门(四)【XML和JSON互转】
- Json.NET使用入门(四)【复杂Json反序列化】
- Json.NET使用入门(六)【LINQ to JSON】
- Dapper.NET使用入门(三)【Helper测试】
- Kafka.net使用编程入门(三)
- Json.net入门基础
- [Json.net]快速入门
- Json.NET使用入门(二)【反序列化】
- JSon使用入门
- SQLite.Net使用入门(三)【增删改查】
- json.net的使用
- asp、net使用json
- asp.net 使用json
- 使用JSON.NET
- 和为S的正整数序列
- Android7.0 JACK编译器不支持多用户同时编译的问题的解决
- 嵌入式linux软件平台--ROM Code
- C++int转string
- Extjs4.0日历插件与项目整合的详细介绍
- Json.NET使用入门(三)【设置】
- dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications
- Android菜鸟的学习记录。
- spring mvc 和ajax异步交互完整实例
- 设计一个(安全、通用、灵活、可扩展)的用户登录系统
- 三层架构与MVC的区别
- 模仿ios风格的ItemPicker控件
- linux_下IP、网关、DNS地址配置
- caffe的caffe.proto