获取Object对象的所有成员变量:
FieldInfo[] fields = obj.GetType().GetFields(); // obj可以为任意类型对象
获取变量名称:
string name = field.Name;
获取变量值:
Object valueObj = field.GetValue(obj);
设置obj中指定变量的值:
string value = "123";
Type type = field.FieldType;
object valueObj = Convert.ChangeType(value, type); // 转化为变量对应类型
field.SetValue(obj, valueObj); // 设置值
类对象数据存储示例:
源码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace SciTools
{
public class OrderParam
{
public string orderId = "";
public string param = "";
public int count = 0;
#region 类对象逻辑
public OrderParam(string orderId = "", string param = "", int count = 0)
{
this.orderId = orderId;
this.param = param;
this.count = count;
}
/// <summary>
/// 从data数据构建OrderParam
/// </summary>
public static OrderParam Parse(string data)
{
OrderParam I = new OrderParam();
StringTool.setAllFields(I, data);
return I;
}
//{
// #orderId#(0005)#orderId#
// #param#(参数)#param#
// #count#(12)#count#
//}
/// <summary>
/// 将所有成员变量转化为字符串格式
/// </summary>
public string ToString()
{
return StringTool.getAllFields(this);
}
#endregion
#region List数组与String互转
public static string ToString(List<OrderParam> list)
{
StringBuilder sb = new StringBuilder();
foreach(OrderParam param in list)
{
sb.AppendLine(param.ToString());
}
return sb.ToString();
}
public static List<OrderParam> ParseList(string data)
{
List<OrderParam> list = new List<OrderParam>();
if (!data.Trim().Equals(""))
{
foreach (string iteam0 in data.Split('}'))
{
string iteam = iteam0.Trim();
if (iteam.Equals("")) continue;
if (iteam.StartsWith("{")) iteam = iteam.Substring(1).Trim();
OrderParam param = OrderParam.Parse(iteam);
list.Add(param);
}
}
return list;
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace SciTools
{
/// <summary>
/// 读取Object对象的所有成员变量, 将类中所有变量信息转化为字符串进行存储
/// </summary>
public class StringTool
{
#region 成员变量序列化(转化为string、从string赋值)
/// <summary>
/// 获取Object对象,所有成员变量信息
/// </summary>
public static string getAllFields(Object obj)
{
string data = "\r\n";
FieldInfo[] fields = obj.GetType().GetFields();
foreach (FieldInfo field in fields)
{
string name = field.Name; // 类变量名称
string value = field.GetValue(obj).ToString(); // 类变量值
data += "\t" + NodeStr(value, name, false) + "\r\n";
}
data = "{" + data + "}";
return data;
}
/// <summary>
/// 设置Object对象的所有成员变量值(从data中解析数据)
/// </summary>
/// <param name="obj"></param>
/// <param name="data"></param>
public static void setAllFields(Object obj, string data)
{
FieldInfo[] fields = obj.GetType().GetFields();
foreach (FieldInfo field in fields)
{
string name = field.Name;
string value = getNodeData(data, name, false); // 获取变量字符串值
Type type = field.FieldType;
object valueObj = Convert.ChangeType(value, type); // 转化为变量对应类型
field.SetValue(obj, valueObj); // 设置值
}
}
#endregion
#region 节点数据生成、读取
/// <summary>
/// 从自定义格式的数据data中,获取nodeName对应的节点数据
///
/// NeedToRegister(false)NeedToRegister // finalNode = false;
/// RegisterPrice(1) // finalNode = true;
/// </summary>
/// <param name="data">待解析的数据</param>
/// <param name="nodeName">节点名称</param>
/// <param name="finalNode">是否为叶节点</param>
/// <returns></returns>
public static string getNodeData(string data, string nodeName, bool finalNode)
{
nodeName = "#" + nodeName + "#";
if (!data.Contains(nodeName)) return "";
try
{
string S = nodeName + "(", E = ")" + (finalNode ? "" : nodeName);
int indexS = data.IndexOf(S) + S.Length;
int indexE = data.IndexOf(E, indexS);
return data.Substring(indexS, indexE - indexS);
}
catch (Exception) { return data; }
}
/// <summary>
/// 将数据转化为节点形式
/// </summary>
public static string NodeStr(string data, string nodeName, bool finalNode)
{
nodeName = "#" + nodeName + "#";
if (!finalNode) return nodeName + "(" + data + ")" + nodeName;
else return nodeName + "(" + data + ")";
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace SciTools
{
/// <summary>
/// 数据存储
/// </summary>
public class FileDB
{
static FileDB instance = null;
public static FileDB Instance()
{
if (instance == null) instance = new FileDB(AppDomain.CurrentDomain.BaseDirectory + "DB.txt");
return instance;
}
//----------------------
string filePath = ""; // 文件保存路径
public List<OrderParam> list = null; // 数据信息
FileDB(string filePath)
{
this.filePath = filePath;
string fileData = FileProcess.fileToString(filePath);
list = OrderParam.ParseList(fileData);
}
/// <summary>
/// 保存数据
/// </summary>
public void Save()
{
string data = OrderParam.ToString(list);
FileProcess.SaveProcess(data, filePath);
}
/// <summary>
/// 清空数据
/// </summary>
public void Clear()
{
list.Clear();
FileProcess.SaveProcess("", filePath);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SciTools
{
public class FileProcess
{
#region 文件读取与保存
/// <summary>
/// 获取文件中的数据串
/// </summary>
public static string fileToString(String filePath)
{
string str = "";
//获取文件内容
if (System.IO.File.Exists(filePath))
{
bool defaultEncoding = filePath.EndsWith(".txt");
System.IO.StreamReader file1;
file1 = new System.IO.StreamReader(filePath); //读取文件中的数据
//if (defaultEncoding) file1 = new System.IO.StreamReader(filePath, Encoding.Default);//读取文件中的数据
//else file1 = new System.IO.StreamReader(filePath); //读取文件中的数据
str = file1.ReadToEnd(); //读取文件中的全部数据
file1.Close();
file1.Dispose();
}
return str;
}
/// <summary>
/// 保存数据data到文件处理过程,返回值为保存的文件名
/// </summary>
public static String SaveProcess(String data, String filePath, Encoding encoding = null)
{
//不存在该文件时先创建
System.IO.StreamWriter file1 = null;
if (encoding == null) file1 = new System.IO.StreamWriter(filePath, false); //文件已覆盖方式添加内容
else file1 = new System.IO.StreamWriter(filePath, false, encoding); // 使用指定的格式进行保存
file1.Write(data); //保存数据到文件
file1.Close(); //关闭文件
file1.Dispose(); //释放对象
return filePath;
}
/// <summary>
/// 获取当前运行目录
/// </summary>
public static string CurDir()
{
return AppDomain.CurrentDomain.BaseDirectory;
}
#endregion
}
}