c# - 给定基本读取方法,如何读取自定义类的数据包?
问题描述
我已经为我的 tcp 服务实现了以字节为单位处理数据的写/读方法。但是,这些方法只能处理基本类型,例如
public void Write(float value)
{
// write floats to bytes
}
public float ReadFloat()
{
// read bytes into floats
...
return result;
}
每次我尝试转换自定义类时,我都必须为其创建一个自定义方法来读取/写入,例如
public class person
{
int age;
string name;
// ... more types
}
public void Write(Person p)
{
Write(p.age);
Write(p.name);
// write more types...
}
因此,我尝试实现一个通用方法来处理这种数据结构,这是我想出的用于读取的方法,它基本上尝试访问所有成员类型,并相应地调用函数。
public T Read<T>(Type type)
{
Object value = new object();
var handler = new Dictionary<Type, Action>()
{
{ typeof(byte) , () => { value = ReadByte(); } },
{ typeof(bool) , () => { value = ReadBool(); } },
{ typeof(int) , () => { int value = ReadInt(); Console.WriteLine(value.ToString()); } },
{ typeof(string), () => { value = ReadString(); } },
{ typeof(float) , () => { value = ReadFloat(); } },
{ typeof(long) , () => { value = ReadLong(); } }
};
MemberInfo [] memberInfo = type.GetMembers();
foreach(var member in memberInfo)
{
switch (member.MemberType)
{
// filters to focus on private/public field members
case MemberTypes.Field:
FieldInfo field = type.GetField(member.Name);
handler[field.FieldType]();
Console.WriteLine($"{value.ToString()}");;
break;
// others like constructors, ignored
default:
break;
}
}
// code that converts into type T?
T result = new T();
return result;
}
目标是让这个Read方法接受一个类类型,一个一个地获取其成员的类型,根据每个类型调用基本的read方法将字节转换为每个类型,并使用这些数据创建该类的一个实例并返回它.
本质上问题是,我想根据输入类 Type 参数返回一个类实例,但我不知道如何使用从基本读取方法返回的数据来创建这样一个类实例以在最后返回。我正在寻找一个实用的解决方案,因为这为我的项目节省了很多精力,但感谢任何帮助!
解决方案
推荐阅读
- c++ - 按段比较 64 位整数
- php - 最近的帖子显示不正确
- javascript - 如何将数据传递给嵌套的子组件vue js?
- jhipster - jhipster update --force 对现有项目
- python - 为空参数设置默认值 (Python)
- mysql - 如何读取数据文件并将数据插入mysql数据库
- python - 为什么 git clone 无法在 Linux Mint 上统计文件?
- android - 是否在操作系统重启后调用 onActivityResult() 之前重新创建了活动的视图?
- python - 日期时间:ValueError:只能比较标签相同的系列对象 - Python
- android - 我应该在 AndroidStudio 中使用 .gitignore Application/build/ 文件夹吗?