赞
踩
FieldInfo[] fields = obj.GetType().GetFields(); // obj可以为任意类型对象
string name = field.Name;
Object valueObj = field.GetValue(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
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。