无论人生经历了什么都要明白,我们既不是最幸运的也不是最不幸的,因为我们所经历的有人早已体会,有人正在经历,有人即将面对,仅此而已。在人生低谷时谨记:我们并不是唯一面对这种处境的人,但却是唯一可以帮助自己真正走出来的人。只要向着阳光前行,办法总会比困难多。
各种相关辅助类:
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);
if (_container.IsRegistered(objectType))
{
contract.DefaultCreator = () => _container.Resolve(objectType);
}
return contract;
}
}
public class TaskController
{
}
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);
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
{
get { return TraceLevel.Verbose; }
}
public void Trace (TraceLevel level, string message, Exception ex)
{
LogEventInfo logEvent = new LogEventInfo
{
Message = message,
Level = GetLogLevel(level),
Exception = ex
};
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);
object newValue = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects,
Binder = knownTypesBinder
});
Response.Write(newValue.GetType().Name);
}
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);
}
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);
}
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);
Response.Write(starcraft.ReleaseDate);
}
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);
Response.Write(obj.Member2);
Response.Write(obj.Member3);
Response.Write(obj.Member4);
string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
Response.Write(obj.Member1);
Response.Write(obj.Member2);
Response.Write(obj.Member3);
Response.Write(obj.Member4);
obj = JsonConvert.DeserializeObject<SerializationEventTestObject>(json);
Response.Write(obj.Member1);
Response.Write(obj.Member2);
Response.Write(obj.Member3);
Response.Write(obj.Member4);
}
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)
{
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
}
protected void btnSerializeImmutableCollection_Click (object sender, EventArgs e)
{
}
protected void btnDeserializeImmutableCollection_Click (object sender, EventArgs e)
{
string json = @"[
'One',
'II',
'3'
]" ;
}
protected void btnSerializeExtensionData_Click (object sender, EventArgs e)
{
string json = @"{
'HourlyRate': 150,
'Hours': 40,
'TaxRate': 0.125
}" ;
}
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);
Response.Write(account.Domain);
Response.Write(account.UserName);
}
}
#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
{
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 ; }
[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 ; }
[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
{
public int Member1 { get ; set ; }
public string Member2 { get ; set ; }
[JsonIgnore]
public string Member3 { get ; set ; }
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
{
public Guid Id { get ; set ; }
[DataMember]
public string Name { get ; set ; }
[DataMember]
public int Size { get ; set ; }
}
#endregion
#region Deserialize ExtensionData所需实体类
public class DirectoryAccount
{
public string DisplayName { get ; set ; }
public string UserName { get ; set ; }
public string Domain { get ; set ; }
[JsonExtensionData] private IDictionary<string , JToken> _additionalData;
[OnDeserialized]
private void OnDeserialized (StreamingContext context)
{
string samAccountName = (string ) _additionalData["SAMAccountName" ];
Domain = samAccountName.Split('\\' )[0 ];
UserName = samAccountName.Split('\\' )[1 ];
}
public DirectoryAccount ()
{
_additionalData = new Dictionary<string , JToken>();
}
}
#endregion
结果如图: