获取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}
}

C# 类对象数据存储(Object自定义序列化)相关推荐

  1. python保存类对象_python 存储类对象吗

    Python源码读后小结 Python 笔记 前言(还是叫杂记吧) 在python中一切皆对象, python中的对象体系大致包含了"类型对象", "Mapping对象( ...

  2. php json对象取数据类型,PHP如何科学地json_encode类对象数据

    其实这篇文章更应该针对python, 因为python默认情况下json序列化一个类对象时,是要报错的. 但是我觉得php的码农更多吧,而且主要是想传达一种思想,思想无国界哈. 那就拿PHP举粟,我们 ...

  3. 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换

    在游戏开发中,配置表是不可少的.通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来. 先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue( ...

  4. Python编程基础 第四章 编程练习 请定义一个Circle类,具体要求为:(1)每个Circle类对象可以存储圆心和半径信息;(2)具有设置圆心和半径的方法SetCenter和SetRadius

    题目内容: 请定义一个Circle类,具体要求为:(1)每个Circle类对象可以存储圆心和半径信息:(2)具有设置圆心和半径的方法SetCenter和SetRadius:(3)具有计算圆面积的方法G ...

  5. Python编程基础 第四章 编程练习 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体;2)具有用于初始化半径和高的构造方法;(3)具有计算圆柱体体积

    题目内容: 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体(包括半径和高):(2)具有用于初始化半径和高的构造方法:(3)具有计算圆柱体体积的方法GetV ...

  6. JavaScript中对象数据存储

    JS中对象数据存储 对象数据存储在堆栈中.栈的数据读取,写入速度快,但是存储的内容较少.堆的读取和写入速度慢,但是存储的内容多.举个例子来说就像电脑中内存和硬盘,内存就像栈,需要经常获取,写入速度比较 ...

  7. 04 c++ 类数据成员的地址和类对象数据成员的地址

    2020年10月4日 1,类数据成员和类对象数据成员地址的区别 (1) 类定义是一种类型声明,存在于代码块中,并没有分配内存空间:对类的数据成员取地址,得到的是类的数据成员在类内的相对偏移量: (2) ...

  8. android 类对象的存储,android - 以共享首选项存储和检索类对象

    android - 以共享首选项存储和检索类对象 在Android中,我们可以在共享首选项中存储类的对象,并在以后检索该对象吗? 如果有可能怎么办? 如果不可能做到这一点的其他可能性是什么? 我知道序 ...

  9. redis储存实体类对象_redis存储对象

    redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列化接 ...

最新文章

  1. C++primer 10.6节练习
  2. Hadoop pipes编程
  3. Fast R-CNN 个人理解
  4. 互联网公司各种“花式”裁员,套路特别深,作为程序员你知道吗?
  5. 深入探索多线程优化方法
  6. ContOS 7 安装Jenkins
  7. 指针以及二重指针的理解
  8. 分布式系统中的序列化与反序列化
  9. 手机qq的位置服务器,腾讯面试题:腾讯服务器每秒有2w个QQ号同时上线,找出5min内重新登入的qq号并打印出来。...
  10. 刚入职的新人如何快速了解公司业务
  11. linux下bluetooth编程(一)基础概念
  12. 毕业设计计算机选题意义怎么写,毕业设计(论文)选题 毕业论文选题研究意义怎么写...
  13. 地图切片的概念与原理
  14. Rehub主题教程 – 如何构建折扣优惠淘客网站
  15. 机器学习小组知识点17:对数正态分布(Logarithmic Normal Distribution)
  16. 经济学人阅读China ,Barriers to Sinology
  17. FPGA从入门到精通(4) - MUX
  18. Si4432无线收发芯片介绍(远距离无线传输模块)
  19. cs231n assignment2 PyTorch
  20. electron安装教程

热门文章

  1. 《职来职往》里的经典语录,总有一句震惊到你!
  2. 【推荐】超全最新医学信息化资源合集
  3. Android VR入门文章
  4. CVE-2018-0802个人浅析
  5. JAVA简单大数运算
  6. PCB工程分享:快速了解PCB设计入门基础知识
  7. 微信每日定时推送消息新闻到群聊或朋友
  8. ACM-ICPC模板整理
  9. R语言实战学习--回归
  10. 大创项目(记录自己的教训)