Random rd = new Random(Guid.NewGuid().GetHashCode());
xxxlist.OrderBy(x = >rd.Next()).Take(n).ToList();
/// <summary>
/// 记录JsonResult、ContentResult、JavaScriptResult三种ActionResult
/// </summary>
public class ResultFilterAttribute : FilterAttribute, IResultFilter
{
/// <summary>
/// 保存post提交的参数
/// </summary>
public bool SavePost { get; set; }
/// <summary>
///
/// </summary>
/// <param name="filterContext"></param>
public void OnResultExecuted(ResultExecutedContext filterContext)
{
var jsonResult = filterContext.Result as JsonResult;
try
{
string content = string.Empty;
JavaScriptSerializer jss = null;
if (jsonResult != null)
{
var data = jsonResult.Data;
jss = new JavaScriptSerializer();
content = jss.Serialize(data);
}
var contentResult = filterContext.Result as ContentResult;
if (contentResult != null)
{
content = contentResult.Content;
}
var javaScriptResult = filterContext.Result as JavaScriptResult;
if (javaScriptResult != null)
{
content = javaScriptResult.Script;
}
if (string.IsNullOrWhiteSpace(content))
{
return;
}
string userName = filterContext.HttpContext.User.Identity.Name;
string ip = Common.WebUtils.Get_ClientIP();
string host = filterContext.HttpContext.Request.Url.Host;
string url = filterContext.HttpContext.Request.Url.ToString();
string browser = Common.WebUtils.GetClientBrowser();
string urlReferrer = string.Empty;
if (filterContext.HttpContext.Request.UrlReferrer != null)
{
urlReferrer = filterContext.HttpContext.Request.UrlReferrer.ToString();
}
string form = string.Empty;
if (SavePost)
{
if (jss == null)
jss = new JavaScriptSerializer();
var keys = filterContext.HttpContext.Request.Form.AllKeys;
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (var key in keys)
{
dic[key] = filterContext.HttpContext.Request.Form[key];
}
form = jss.Serialize(dic);
}
HttpLog.Service.LogInfo_Insert(new HttpLog.Service.LogInfo
{
Browser = browser,
CreateTime = DateTime.Now.Ticks,
Host = host,
IP = ip,
Url = url.ToLower(),
UrlReferrer = urlReferrer.ToLower(),
UserName = userName,
Content = content,
Form = form
});
}
catch (Exception ex)
{
LogHelper.Error("记录httplog失败", ex);
}
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
//........
}
}
string str = "xxxxxxxxxxxxxxxxxxx";
string targetstr = "biaud.com";
bool check = str.ToLower().IndexOf(targetstr, StringComparison.Ordinal) > -1;
对象是否在枚举项中定义
public enum enumStatus {
All = 0,
Started = 1,
End = 2
}
bool enumDefine = Enum.IsDefined(typeof(enumStatus), 1); // or
bool enumDefine = Enum.IsDefined(typeof(enumStatus), "Started");
public static string Md5EncryptClassic(string plainText) {
using(MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider()) {
byte[] _byte = hashmd5.ComputeHash(Encoding.Default.GetBytes(plainText ? ?string.Empty));
return System.BitConverter.ToString(_byte).Replace("-", "").ToLower();
}
}
public static string HashEx(long userId) {
string md = Md5EncryptClassic(userId.ToString());
return md.Substring(0, 2).ToLower();
}
public static string Serialize(object value) {
if (value == null) {
return null;
}
XmlSerializer xs = new XmlSerializer(value.GetType());
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
xs.Serialize(sw, value);
Regex reg = new Regex(@"[\s]*xmlns:[\w]*?=""[\w\W]*?""");
string temp = reg.Replace(sb.ToString(), string.Empty);
Regex reg2 = new Regex(@"<[?]xml[\w\W]+?[?]>");
temp = reg2.Replace(temp, string.Empty);
temp = StringHelper.ClearSpecialChar(temp);
// "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
return temp;
}
public static T Deserialize < T > (string xml) {
try {
if (!string.IsNullOrEmpty(xml)) {
XmlSerializer xs;
StringReader sr = new StringReader(xml);
xs = new XmlSerializer(typeof(T));
return (T) xs.Deserialize(sr);
} else {
return
default (T);
}
} catch //(Exception ex)
{
return
default (T);
}
}
public class StringHelper {
/// <summary>
/// 清除特殊字符
/// </summary>
/// <param name="sourceString"></param>
/// <returns></returns>
public static string ClearSpecialChar(string sourceString) {
string pattern = @"[\u0000-\u0008]|[\u000B-\u000C]|[\u000E-\u001F]";
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline);
string temp = reg.Replace(sourceString, "");
//&#x{0:X};
return System.Text.RegularExpressions.Regex.Replace(temp, "&#x[0-9a-f]{1,6};", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
}
}
//eg:
FreeProductExpand model = Deserialize < FreeProductExpand > (xmlstr);
string anstr = model.Answer;
xxxBusinessDTO entity = new xxxBusinessDTO();
var query = entity.GetType().GetProperties().Select(x = >x.Name).ToList();
foreach(var item in query) {
this.listBox1.Items.Add(item);
}
this.label1.Text = string.Format("类 xxxBusinessDTO 共{0}个字段", query.Count);
//匹配
var checkarr = checkstr.Split(','); //checkstr--->ID,ProductID,ProductPrice,...
checkarr.ToList().ForEach(x = >{
if (!query.Any(t = >t.ToString() == x.ToString())) {
this.listBox2.Items.Add(x);
}
});
object转byte[]:
private byte[] ObjectToByteArray(object obj)
{
if (obj == null)
return new byte[] { };
var bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
bf.Serialize(ms, obj);
return ms.ToArray();
}
}
利用动态对象和反射,给属性赋值(简单的mapping):
public class CCMapper<T> where T : class
{
//为了避免不同线程造成对静态字段更改的不可控事件发生 通常静态字段都使用readonly 表示初始化以后 就只读了
private static readonly Dictionary<string, PropertyInfo> PropertyMap;
/// <summary>
/// 静态构造函数只在类被调用的第一次启动 类似初始化的作用
/// 静态构造函数不会建立一个实例 而是用于初始化函数本身的一些static的字段的
/// 没有参数 也没有修饰符
/// </summary>
static CCMapper() //静态够着函数只执行一次
{
PropertyMap = typeof(T).GetProperties().ToDictionary(p => p.Name.ToLower(), p => p);
}
public static void Map(System.Dynamic.ExpandoObject source, T destination)
{
if (source == null)
throw new ArgumentNullException("source");
if (destination == null)
throw new ArgumentNullException("destination");
foreach (var kv in source)
{
PropertyInfo p;
if (PropertyMap.TryGetValue(kv.Key.ToLower(), out p))
{
var propType = p.PropertyType;
if (kv.Value == null)
{
if (!propType.IsByRef && propType.Name != "Nullable`1")
{
throw new ArgumentException("not nullable");
}
}
p.SetValue(destination, kv.Value == DBNull.Value ? default(T) : kv.Value, null);
}
}
}
}
使用demo:
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
{
new DataColumn("Name", typeof(string)),
new DataColumn("Address", typeof(string)),
new DataColumn("Score", typeof(int)),
new DataColumn("Brithday", typeof(DateTime))
});
DataRow dr = dt.NewRow();
dr["Name"] = "jon";
dr["Address"] = "浙江杭州";
dr["Score"] = 70;
dr["Brithday"] = new DateTime(1987, 9, 20);
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["Name"] = "joyhen";
dr["Address"] = "文三西路";
dr["Score"] = 58;
dr["Brithday"] = DateTime.Now.AddYears(-20);
dt.Rows.Add(dr);
var objects = new List<dynamic>();
foreach (DataRow row in dt.Rows)
{
dynamic obj = new System.Dynamic.ExpandoObject();
foreach (DataColumn column in dt.Columns)
{
var x = (IDictionary<string, object>)obj;
x.Add(column.ColumnName, row[column.ColumnName]);
}
objects.Add(obj);
}
var retval = new List<Tb_Unser>();
foreach (dynamic item in objects)
{
var o = new Tb_Unser();
CCMapper<Tb_Unser>.Map(item, o);
retval.Add(o);
}
//return retval;
var str = string.Join(",", retval.Select(x => x.Name).ToArray());
Console.WriteLine(str);
}
前面提到了ExpandObject,那么我们顺带一说mvc中的序列化,很简单,json.net就ok,这里用Contet输出
public ActionResult Data()
{
dynamic expando = new ExpandoObject();
expando.name = "Jon Skeet";
expando.age = 46;
var json = JsonConvert.SerializeObject(expando);
return Content(json, "application/json");
}
获取枚举项目集合:
string[] itemsarr = Enum.GetNames(typeof(PropertyType)); //枚举集合
PropertyType是枚举对象
Json.net时间格式处理:
/// <summary>
/// 序列化、反序列化 处理类
/// </summary>
/// <typeparam name="T"></typeparam>
public class JsonUtils
{
private static readonly IsoDateTimeConverter _timeFormat;
static JsonUtils()
{
_timeFormat = _timeFormat = new IsoDateTimeConverter()
{
DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
};
}
/// <summary>
/// 序列化
/// </summary>
public static string JsonSerializer(object obj)
{
//return JsonConvert.SerializeObject(obj, Formatting.None, new JsonSerializerSettings()
return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new JsonConverter[1] { _timeFormat }
});
}
/// <summary>
/// 反序列化
/// </summary>
public static T DeserializeObject<T>(string str)
{
if (string.IsNullOrEmpty(str)) return default(T);
return JsonConvert.DeserializeObject<T>(str);
}
}
class CoolMother
{
public static Func<CoolMother> Activator { get; protected set; }
//防止空引用
static CoolMother()
{
Activator = () => new CoolMother();
}
public CoolMother()
{
Message = "I am the mother";
}
public string Message { get; protected set; }
}
class HotDaughter : CoolMother
{
public HotDaughter()
{
Activator = () => new HotDaughter();
Message = "I am the daughter";
}
}
测试调用:
Console.WriteLine(HotDaughter.Activator().Message); //触发几类的静态构造函数
var create = new HotDaughter(); //重写了基类的Activator和Message
Console.WriteLine(HotDaughter.Activator().Message);
I am the mother
I am the daughter
GZip压缩:
public static class CompressionHelper
{
/// <summary>
/// Compress the byte[]
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static byte[] Compress(byte[] input)
{
byte[] output;
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gs = new GZipStream(ms, CompressionMode.Compress))
{
gs.Write(input, 0, input.Length);
gs.Close();
output = ms.ToArray();
}
ms.Close();
}
return output;
}
/// <summary>
/// Decompress the byte[]
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static byte[] Decompress(byte[] input)
{
List<byte> output = new List<byte>();
using (MemoryStream ms = new MemoryStream(input))
{
using (GZipStream gs = new GZipStream(ms, CompressionMode.Decompress))
{
int readByte = gs.ReadByte();
while (readByte != -1)
{
output.Add((byte)readByte);
readByte = gs.ReadByte();
}
gs.Close();
}
ms.Close();
}
return output.ToArray();
}
}
Using classic ADO.NET in ASP.NET 5:
http://blog.developers.ba/using-classic-ado-net-in-asp-net-vnext/