首页 > 学院 > 开发设计 > 正文

C#.NET Object扩展 ToJson/Serialize/Deserialize

2019-11-17 03:40:00
字体:
来源:转载
供稿:网友
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Reflection;
using
System.Data;
using
System.Data.Common;
using
System.Web.Script.Serialization;
using
System.IO;
using
System.Security.Cryptography;
using
System.ComponentModel;
using
System.Runtime.Serialization.Formatters.Binary;
using
System.xml.Serialization;

namespace
Pub.Class {
   
public static class
ObjectExtensions {

       
public static string ToJson(this object
obj){
           
return ToJson(obj, null
);
        }
       
public static string ToJson(this object obj, IEnumerable<javaScriptConverter>
jsonConverters) {
            JavascriptSerializer serializer
= new
JavaScriptSerializer();
           
if (jsonConverters != null) serializer.RegisterConverters(jsonConverters ?? new JavaScriptConverter[0
]);
           
return
serializer.Serialize(obj);
        }

       
public static T ConvertTo<T>(this object value) { return value.ConvertTo(default
(T)); }
       
public static T ConvertTo<T>(this object
value, T defaultValue) {
           
if(value != null
) {
                var targetType
= typeof
(T);

                var converter
=
TypeDescriptor.GetConverter(value);
               
if(converter != null
) {
                   
if(converter.CanConvertTo(targetType)) return
(T) converter.ConvertTo(value, targetType);
                }

                converter
=
TypeDescriptor.GetConverter(targetType);
               
if(converter != null
) {
                   
try { if(converter.CanConvertFrom(value.GetType())) return (T) converter.ConvertFrom(value); } catch
{}
                }
            }
           
return
defaultValue;
        }
       
public static T ConvertTo<T>(this object value, T defaultValue, bool
ignoreException) {
           
if
(ignoreException) {
               
try
{
                   
return value.ConvertTo<T>
();
                }
               
catch
{
                   
return
defaultValue;
                }
            }
           
return value.ConvertTo<T>
();
        }

       
public static int ToInt(this object strValue, int defValue) { int def = 0; int.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
 
public static byte ToTinyInt(this object strValue, byte defValue) { byte def = 0byte.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
 
public static short ToSmallInt(this object strValue, short defValue) { short def = 0short.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
 
public static decimal ToDecimal(this object strValue, decimal defValue) { decimal def = 0decimal.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
 
public static float ToFloat(this object strValue, float defValue) { float def = 0float.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
 
public static Int64 ToBigInt(this object strValue, Int64 defValue) { Int64 def = 0;  Int64.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
 
public static decimal ToMoney(this object strValue, decimal defValue) { decimal def = 0decimal.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
       
public static int ToInteger(this object strValue, int defValue) { int def = 0; int.TryParse(strValue.ToString(), out def); return def == 0 ?
defValue : def; }
       
public static bool ToBool(this object ExPRession, bool
defValue) {
           
if (Expression != null
) {
               
if (string.Compare(Expression.ToString(), "true", true) == 0) return true
;
               
if (string.Compare(Expression.ToString(), "false", true) == 0) return false
;
               
if (string.Compare(Expression.ToString(), "1", true) == 0) return true
;
               
if (string.Compare(Expression.ToString(), "0", true) == 0) return false
;
            }
           
return
defValue;
        }
       
public static int ToInt(this object strValue) { return strValue.ToInt(0
); }
       
public static byte ToTinyInt(this object strValue) { return strValue.ToTinyInt(0
); }
       
public static short ToSmallInt(this object strValue) { return strValue.ToSmallInt(0
); }
       
public static decimal ToDecimal(this object strValue) { return strValue.ToDecimal(0
); }
       
public static float ToFloat(this object strValue) { return strValue.ToFloat(0
); }
       
public static Int64 ToBigInt(this object strValue) { return strValue.ToBigInt(0
); }
       
public static decimal ToMoney(this object strValue) { return strValue.ToMoney(0
); }
       
public static int ToInteger(this object strValue) { return strValue.ToInteger(0
); }
       
public static bool ToBool(this object strValue) { return strValue.ToBool(false
); }

       
public static object InvokeMethod(this object obj, string methodName, params object
[] parameters) {
           
return InvokeMethod<object>
(obj, methodName, parameters);
        }
       
public static T InvokeMethod<T>(this object obj, string
methodName) {
           
return InvokeMethod<T>(obj, methodName, null
);
        }
       
public static T InvokeMethod<T>(this object obj, string methodName, params object
[] parameters) {
            var type
=
obj.GetType();
            var method
=
type.GetMethod(methodName);

           
if(method == null) throw new ArgumentException(string.Format("Method '{0}' not found."
, methodName), methodName);

            var value
=
method.Invoke(obj, parameters);
           
return (value is T ? (T) value : default
(T));
        }

       
public static object GetPropertyValue(this object obj, string
propertyName) {
           
return GetPropertyValue<object>(obj, propertyName, null
);
        }
       
public static T GetPropertyValue<T>(this object obj, string
propertyName) {
           
return GetPropertyValue<T>(obj, propertyName, default
(T));
        }
       
public static T GetPropertyValue<T>(this object obj, string
propertyName, T defaultValue) {
            var type
=
obj.GetType();
            var property
=
type.GetProperty(propertyName);

           
if(property == null) throw new ArgumentException(string.Format("Property '{0}' not found."
, propertyName), propertyName);

            var value
= property.GetValue(obj, null
);
           
return (value is T ?
(T) value : defaultValue);
        }
       
public static void SetPropertyValue(this object obj, string propertyName, object
value) {
            var type
=
obj.GetType();
            var property
=
type.GetProperty(propertyName);

           
if(property == null) throw new ArgumentException(string.Format("Property '{0}' not found."
, propertyName), propertyName);

            property.SetValue(obj, value,
null
);
        }

       
public static T GetAttribute<T>(this object obj) where
T : Attribute {
           
return GetAttribute<T>(obj, true
);
        }
       
public static T GetAttribute<T>(this object obj, bool includeInherited) where
T : Attribute {
            var type
= (obj as Type ??
obj.GetType());
            var attributes
= type.GetCustomAttributes(typeof
(T), includeInherited);
           
if((attributes != null) && (attributes.Length > 0
)) {
               
return (attributes[0] as
T);
            }
           
return null
;
        }

       
public static IEnumerable<T> GetAttributes<T>(this object obj) where
T : Attribute {
           
return GetAttributes<T>
(obj);
        }
       
public static IEnumerable<T> GetAttributes<T>(this object obj, bool includeInherited) where
T : Attribute {
            var type
= (obj as Type ??
obj.GetType());
           
foreach(var attribute in type.GetCustomAttributes(typeof
(T), includeInherited)) {
               
if(attribute is T) yield return
(T) attribute;
            }
        }

       
public static bool IsType(this object
obj, Type type) {
           
return
obj.GetType().Equals(type);
        }
       
public static T ToType<T>(this object value) { return
(T)value; }
       
public static bool IsArray(this object
obj) {
           
return obj.IsType(typeof
(System.Array));
        }
       
public static bool IsDBNull(this object
obj) {
           
return obj.IsType(typeof
(DBNull));
        }

       
public static byte[] Serialize(this object
value) {
            MemoryStream ms
= new
MemoryStream();
            BinaryFormatter bf1
= new
BinaryFormatter();
            bf1.Serialize(ms, value);
           
return
ms.ToArray();
        }

       
public static void CheckOnNull(this object @this, string
parameterName) {
  
if(@this.IsNull()) throw new
ArgumentNullException(parameterName);
  }
       
public static void CheckOnNull(this object @this, string parameterName, string
message) {
  
if(@this.IsNull()) throw new
ArgumentNullException(parameterName, message);
  }
       
public static bool IsNull(this object
@this) {
  
return @this == null
;
  }
       
public static bool IsNotNull(this object
@this) {
  
return !
@this.IsNull();
  }
       
public static T UnsafeCast<T>(this object
value) {
           
return value.IsNull() ? default
(T) : (T)value;
        }
       
public static T SafeCast<T>(this object
value) {
           
return value is T ? value.UnsafeCast<T>() : default
(T);
        }
       
public static bool InstanceOf<T>(this object
value) {
           
return value is
T;
        }

       
public static void SerializeXmlFile(this object o, string
fileName) {
            XmlSerializer serializer
= new
XmlSerializer(o.GetType());
           
if (!FileFolder.FileExists(fileName)) return
;
           
using (FileStream stream = new
FileStream(fileName, FileMode.Create, Fileaccess.Write)) serializer.Serialize(stream, o);
        }
       
public static T DeserializeXmlFile<T>(string
fileName) {
            T o;
            XmlSerializer serializer
= new XmlSerializer(typeof
(T));
           
using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) o =
(T)serializer.Deserialize(stream);
           
return
o;
        }

       
public static string SerializeXml(this object
o) {
            XmlSerializer serializer
= new
XmlSerializer(o.GetType());
            StringBuilder stringBuilder
= new
StringBuilder();
           
using (TextWriter textWriter = new
StringWriter(stringBuilder)) serializer.Serialize(textWriter, o);
           
return
stringBuilder.ToString();
        }
       
public static T DeserializeXml<T>(this string
xml) {
           
return (T)Deserialize(xml, typeof
(T));
        }
       
public static object Deserialize(string
xml, Type type) {
           
object
o;
            XmlSerializer serializer
= new
XmlSerializer(type);
           
using (TextReader textReader = new StringReader(xml)) o =
serializer.Deserialize(textReader);
           
return
o;
        }

       
public static void Write(this object
o) { Msg.Write(o); }
       
public static void WriteEnd(this object
o) { Msg.WriteEnd(o); }
    }
}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表