我有一个类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 可以是对象或基本数据类型,例如 int
或 bool
.
我正在使用添加的数据传输对象
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>
来自 value
在 VResult<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>
的实例用value
的 1
.这是您要找的吗?
关于c# - 提取对象类型以用作通用 <T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718438/