using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Text;
namespace CSFrameworkV5.Core.Common
{
public static class DataConverter
{
//图片 转为 base64编码的文本
public static string ImgToBase64String(string Imagefilename)
{
Bitmap bmp = null;
try
{
using (bmp = new Bitmap(Imagefilename))
{
using (var ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
var arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
}
}
catch (Exception ex)
{
return null;
}
finally
{
if (bmp != null) bmp.Dispose();
}
}
//base64编码的文本 转为 图片
public static Bitmap Base64StringToImage(string inputStr)
{
try
{
var arr = Convert.FromBase64String(inputStr);
var ms = new MemoryStream(arr);
return new Bitmap(ms);
}
catch
{
return null;
}
}
//base64编码的文本 转为 图片
public static bool Base64StringToFile(string inputStr, string FilePath,
string FileName)
{
FileStream fs = null;
try
{
var extension = Path.GetExtension(FilePath + "/" + FileName);
var SaveFileName = Guid.NewGuid().ToStringEx() + extension;
fs = File.Create(FilePath + FileName);
var arr = Convert.FromBase64String(inputStr);
using (var ms = new MemoryStream(arr))
{
ms.WriteTo(fs);
}
return true;
}
catch
{
return false;
}
finally
{
if (fs != null)
{
fs.Close();
fs.Dispose();
fs = null;
}
}
}
///
/// 返回时间戳,秒
///
///
///
public static long GetUtcTrick(DateTime time)
{
var fs = new DateTimeOffset(time);
var trick = (fs.UtcTicks - 621355968000000000) / 10000000; //秒值
return trick;
}
public static IEnumerable ConvertObject(DataTable dt)
where T : new()
{
var v = typeof(T).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
var Fields = new List();
foreach (var s in v)
if (dt.Columns.Contains(s.Name))
Fields.Add(s);
foreach (DataRow dr in dt.Rows)
{
var t = new T();
foreach (var s in Fields)
{
if (Equals(dr[s.Name], DBNull.Value)) continue;
var tv = System.ComponentModel.TypeDescriptor
.GetConverter(s.PropertyType)
.ConvertFromString(dr[s.Name].ToStringEx());
s.SetValue(t, tv, null);
}
yield return t;
}
}
public static T ConvertObject(DataRow dr) where T : new()
{
var v = typeof(T).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
var t = new T();
foreach (var s in v)
if (dr.Table.Columns.Contains(s.Name))
{
if (Equals(dr[s.Name], DBNull.Value)) continue;
{
var tv = System.ComponentModel.TypeDescriptor
.GetConverter(s.PropertyType)
.ConvertFromString(dr[s.Name].ToStringEx());
s.SetValue(t, tv, null);
}
}
return t;
}
public static T ConvertObjectIgnoreCase(
Dictionary dic) where T : new()
{
var v = typeof(T).GetProperties(BindingFlags.Public |
BindingFlags.Instance);
var fr = new Dictionary();
foreach (var key in dic.Keys) fr.Add(key.ToLower(), key);
var t = new T();
foreach (var s in v)
if (fr.ContainsKey(s.Name.ToLower()))
{
var key = fr[s.Name.ToLower()];
var value = dic[key];
if (Equals(value, DBNull.Value) || value == null) continue;
try
{
var tv = System.ComponentModel.TypeDescriptor
.GetConverter(s.PropertyType)
.ConvertFromString(value.ToStringEx());
s.SetValue(t, tv, null);
}
catch
{
s.SetValue(t, value, null);
}
}
return t;
}
public static T Convert2Object(DbDataReader row) where T : new()
{
var t = new T();
var dic = new Dictionary();
var type = typeof(T);
string fname;
object tv;
object fvalue;
for (var i = 0; i < row.FieldCount; i++)
{
fname = row.GetName(i);
fvalue = row.GetValue(i);
dic.Add(fname.ToLower(), fvalue);
var p = type.GetProperty(fname,
BindingFlags.Public | BindingFlags.Instance |
BindingFlags.IgnoreCase);
if (p != null)
{
if (string.IsNullOrEmpty(fvalue.ToStringEx()))
tv = p.PropertyType.IsValueType
? Activator.CreateInstance(p.PropertyType)
: null;
else
tv = System.ComponentModel.TypeDescriptor
.GetConverter(p.PropertyType)
.ConvertFromString(fvalue.ToStringEx());
p.SetValue(t, tv, null);
}
}
return t;
}
public static T GetKey(Dictionary data, string key)
{
try
{
if (data.ContainsKey(key))
{
var tv = System.ComponentModel.TypeDescriptor
.GetConverter(typeof(T))
.ConvertFrom(data[key].ToStringEx());
return (T)tv;
}
else
{
return default;
}
}
catch //(Exception ex)
{
return default;
}
}
public static string GetTableColumnValue(DataTable dt,
string ColumnName)
{
var str = new StringBuilder();
foreach (DataRow dr in dt.Rows) str.Append("," + dr[ColumnName]);
if (str.Length > 0)
str.Remove(0, 1);
return str.ToStringEx();
}
}
}