使用系統;
使用 System.Collections.Generic;
使用 System.Linq;
使用系統文字;
使用系統反射;
使用系統數據;
使用 System.Data.Common;
使用 System.Web.Script.Serialization;
使用系統.IO;
使用系統.安全性.密碼學;
使用 System.ComponentModel;
使用 System.Runtime.Serialization.Formatters.Binary;
使用 System.xml.Serialization;
命名空間 Pub.Class {
公共靜態類別 ObjectExtensions {
公共靜態字串ToJson(此物件obj){
返回 ToJson(obj, null);
}
公共靜態字串 ToJson(此物件 obj, IEnumerable<javaScriptConverter> jsonConverters) {
JavascriptSerializer 序列化器 = new JavaScriptSerializer();
if (jsonConverters != null) serializer.RegisterConverters(jsonConverters ?? new JavaScriptConverter[0]);
返回序列化器.Serialize(obj);
}
公共靜態 T ConvertTo<T>(this 物件值) { return value.ConvertTo(default(T)); }
public static T ConvertTo<T>(this 物件值, T defaultValue) {
如果(值!=空){
var targetType = typeof(T);
var轉換器= TypeDescriptor.GetConverter(值);
如果(轉換器!= null){
if(converter.CanConvertTo(targetType)) return (T) converter.ConvertTo(value, targetType);
}
轉換器 = TypeDescriptor.GetConverter(targetType);
如果(轉換器!= null){
嘗試{ if(converter.CanConvertFrom(value.GetType())) return (T) converter.ConvertFrom(value); } 抓住 {}
}
}
返回預設值;
}
公共靜態 T ConvertTo<T>(此物件值, T defaultValue, boolignoreException) {
如果(忽略異常){
嘗試 {
傳回值。
}
抓住 {
返回預設值;
}
}
傳回值。
}
公共靜態 int ToInt(這個物件 strValue, int defValue) { int def = 0; int.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態位元組ToTinyInt(這個物件strValue,位元組defValue){位元組def = 0; byte.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態短ToSmallInt(這個物件strValue,短defValue){短def = 0; Short.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態小數 ToDecimal(this 物件 strValue, 小數 defValue) { 小數 def = 0; Decimal.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態浮動ToFloat(這個物件strValue,浮動defValue){浮動def = 0; float.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態 Int64 ToBigInt(this 物件 strValue, Int64 defValue) { Int64 def = 0; Int64.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態小數 ToMoney(this 物件 strValue, 小數 defValue) { 小數 def = 0; Decimal.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態 int ToInteger(這個物件 strValue, int defValue) { int def = 0; int.TryParse(strValue.ToString(), out def);返回def == 0 ? def值:def; }
公共靜態 bool ToBool(這個物件 ExPRession, bool defValue) {
if (表達式!= null) {
if (string.Compare(Expression.ToString(), "true", true) == 0) 回傳 true;
if (string.Compare(Expression.ToString(), "false", true) == 0) 回傳 false;
if (string.Compare(Expression.ToString(), "1", true) == 0) 回傳 true;
if (string.Compare(Expression.ToString(), "0", true) == 0) 回傳 false;
}
返回定義值;
}
公共靜態 int ToInt(this 物件 strValue) { return strValue.ToInt(0); }
公共靜態位元組ToTinyInt(這個物件strValue){返回strValue.ToTinyInt(0); }
公共靜態短ToSmallInt(這個物件strValue){返回strValue.ToSmallInt(0); }
公共靜態小數ToDecimal(this object strValue) { return strValue.ToDecimal(0); }
公共靜態浮動ToFloat(這個物件strValue){返回strValue.ToFloat(0); }
公共靜態 Int64 ToBigInt(this 物件 strValue) { return strValue.ToBigInt(0); }
公共靜態十進位ToMoney(this object strValue) { return strValue.ToMoney(0); }
公共靜態 int ToInteger(this 物件 strValue) { return strValue.ToInteger(0); }
公共靜態 bool ToBool(this 物件 strValue) { return strValue.ToBool(false); }
public static object InvokeMethod(this object obj, string methodName, params object[] 參數) {
return InvokeMethod<物件>(obj, 方法名稱, 參數);
}
公共靜態 T InvokeMethod <T>(此物件 obj,字串方法名稱){
return InvokeMethod<T>(obj, 方法名, null);
}
public static T InvokeMethod<T>(this 物件 obj, string methodName, params object[] 參數) {
var type = obj.GetType();
var method = type.GetMethod(方法名稱);
if(method == null) throw new ArgumentException(string.Format("找不到方法'{0}'。", methodName), methodName);
var value = method.Invoke(obj, 參數);
返回(值是T?(T)值:預設(T));
}
公共靜態物件 GetPropertyValue(此物件 obj, 字串 propertyName) {
返回 GetPropertyValue<物件>(obj, propertyName, null);
}
公用靜態 T GetPropertyValue<T>(此物件 obj, 字串 propertyName) {
返回 GetPropertyValue<T>(obj, propertyName, default(T));
}
公共靜態 T GetPropertyValue<T>(此物件 obj, 字串 propertyName, T defaultValue) {
var type = obj.GetType();
var 屬性 = type.GetProperty(propertyName);
if(property == null) throw new ArgumentException(string.Format("找不到屬性 '{0}'。", propertyName), propertyName);
var value = property.GetValue(obj, null);
返回(值是 T ? (T) 值:defaultValue);
}
公共靜態無效SetPropertyValue(此物件obj,字串屬性名稱,物件值){
var type = obj.GetType();
var 屬性 = type.GetProperty(propertyName);
if(property == null) throw new ArgumentException(string.Format("找不到屬性 '{0}'。", propertyName), propertyName);
property.SetValue(obj, 值, null);
}
公共靜態 T GetAttribute<T>(this 物件 obj) 其中 T : 屬性 {
返回 GetAttribute<T>(obj, true);
}
公共靜態 T GetAttribute<T>(this 物件 obj, bool includeInherited) 其中 T : 屬性 {
var type = (obj as Type ?? obj.GetType());
var 屬性 = type.GetCustomAttributes(typeof(T), includeInherited);
if((屬性!= null) && (attributes.Length > 0)) {
返回(屬性[0]為T);
}
返回空值;
}
公共靜態 IEnumerable<T> GetAttributes<T>(this 物件 obj) 其中 T : 屬性 {
返回 GetAttributes<T>(obj);
}
公共靜態 IEnumerable<T> GetAttributes<T>(this 物件 obj, bool includeInherited) 其中 T : 屬性 {
var type = (obj as Type ?? obj.GetType());
foreach(type.GetCustomAttributes(typeof(T), includeInherited)) { 中的 var 屬性
if(屬性是T)yield return(T)屬性;
}
}
公共靜態布林IsType(此物件obj,類型類型){
返回 obj.GetType().Equals(type);
}
public static T ToType<T>(this 物件值) { return (T)value; }
公共靜態布林IsArray(這個物件obj){
返回 obj.IsType(typeof(System.Array));
}
公共靜態布爾IsDBNull(這個物件obj){
返回 obj.IsType(typeof(DBNull));
}
公共靜態位元組[]序列化(此物件值){
MemoryStream ms = new MemoryStream();
BinaryFormatter bf1 = new BinaryFormatter();
bf1.Serialize(ms, 值);
返回 ms.ToArray();
}
公共靜態無效CheckOnNull(這個物件@this,字串參數名稱){
if(@this.IsNull()) 拋出 new ArgumentNullException(parameterName);
}
public static void CheckOnNull(this 物件 @this, 字串參數名稱, 字串訊息) {
if(@this.IsNull()) 拋出 new ArgumentNullException(parameterName, message);
}
公共靜態布林IsNull(這個物件@this){
返回@this == null;
}
公共靜態布林IsNotNull(這個物件@this){
return [email protected] ();
}
公共靜態 T UnsafeCast<T>(此物件值){
傳回值.IsNull() ?預設(T):(T)值;
}
公共靜態 T SafeCast<T>(此物件值){
傳回值是 T ? value.UnsafeCast<T>() : 預設(T);
}
public static bool InstanceOf<T>(這個物件值) {
傳回值為T;
}
公共靜態無效SerializeXmlFile(此物件o,字串檔案名稱){
XmlSerializer 序列化器 = new XmlSerializer(o.GetType());
if (!FileFolder.FileExists(檔名)) 回傳;
使用(FileStream流=新FileStream(文件名,FileMode.Create,Fileaccess.Write))serializer.Serialize(stream,o);
}
公用靜態 T DeserializeXmlFile<T>(字串檔名){
到;
XmlSerializer 序列化器 = new XmlSerializer(typeof(T));
使用 (FileStream 流 = new FileStream(fileName, FileMode.Open, FileAccess.Read)) o = (T)serializer.Deserialize(stream);
返回o;
}
公共靜態字串SerializeXml(此物件o){
XmlSerializer 序列化器 = new XmlSerializer(o.GetType());
StringBuilder stringBuilder = new StringBuilder();
使用 (TextWriter textWriter = new StringWriter(stringBuilder)) 序列化器.Serialize(textWriter, o);
返回 stringBuilder.ToString();
}
公用靜態 T DeserializeXml<T>(此字串 xml){
返回(T)反序列化(xml,typeof(T));
}
公共靜態物件反序列化(字串xml,類型類型){
對象o;
XmlSerializer 序列化器 = new XmlSerializer(type);
使用 (TextReader textReader = new StringReader(xml)) o = serializer.Deserialize(textReader);
返回o;
}
公共靜態無效寫入(這個物件o){Msg.Write(o); }
公共靜態無效WriteEnd(這個物件o){Msg.WriteEnd(o); }
}
}