c# - 提取对象类型以用作通用 <T>

标签 c# generics reflection json.net

我有一个类VResult<T>可以用

实例化
bool value = true;    
VResult<bool> vr =  new VResult<bool>(value);

如果我不知道 value 的类型, 我想做类似的事情

VResult<typeof value> = new VResult<typeof value>(value);

这可能吗?

最终目标是序列化/反序列化VResult<T> :

string json = JsonConvert.SerializeObject(new VResult<bool>(true));

where 可以是对象或基本数据类型,例如 intbool .

我正在使用添加的数据传输对象

ValueTypeName = Value.GetType().Name;

ValueTypeNamespace = Value.GetType().Namespace;

属性以便在接收端我可以使用

JObject obj = JObject.Parse(json);
string vt = (string)obj["ValueTypeName"];
string vtn = (string)obj["ValueTypeNamespace"];
Type type = Type.GetType($"{vtn}.{vt}");
var value = Activator.CreateInstance(type);
value = obj["Value"];
VResult<typeof value> vr = new VResult<typeof value> (value); //not correct

获取所有Type关于 value 的信息,但我只是不知道如何获得通用 <T>来自 valueVResult<T> 中传递它构造函数;

最佳答案

您可以像这样创建通用实例:

object value = 1; //I don't know the runtime type of this
var genericType = typeof(VResult<>).MakeGenericType(value.GetType());
var genericInstance = Activator.CreateInstance(genericType, 
                                               new object[] { value });

现在你有一个 VResult<int> 的实例用value1 .这是您要找的吗?

关于c# - 提取对象类型以用作通用 <T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718438/

相关文章:

c# - 如何在 Mac 上的 VirtualBox 中运行 XNA?

c# - 在 .net Core 中使用通用存储库进行单元测试

c# - WPF MVVM 设计问题

C# - 使用反射的动态转换

java - 使用反射在 java 中为 android 转换对象

c# - 如何将参数值存储在 webservice 的 oracle 过程中

java - 获取通用数组类

java - 使用泛型类层次结构时出现编译错误

java - 获取集合上元素的类类型信息

Java Reflection API - 获取 String[] 字段的值