2017-12-08 14 views
4

로 사용, 나는추출 유형이 내가 <code>value</code>의 종류를 알 수없는 경우</p> <pre><code>bool value = true; VResult<bool> vr = new VResult<bool>(value); </code></pre> <p>인스턴스화 할 수있는 클래스 <code>VResult<T></code>이 일반적인 <T>

같은 일을하고 싶습니다
VResult<typeof value> = new VResult<typeof value>(value); 

그럴 수 있습니까?

궁극적 인 목표는/직렬화 VResult<T>를 역 직렬화하는 것입니다

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

어디 개체 또는 기본 데이터 타입이 될 수 같은 int 또는 bool. 즉, 수신 측에 내가

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 

모두를 얻기 위해 사용할 수 있도록

나는

ValueTypeName = Value.GetType().Name; 

ValueTypeNamespace = Value.GetType().Namespace; 

속성을 추가하는 데이터 전송 객체를 사용하고 있습니다 Type에 대한 정보 value,하지만 난 단지 generi를 얻는 방법을 알아 내지 못한다. c <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 }); 

을 그리고 지금 당신은 1valueVResult<int>의 인스턴스가 :

답변

3

은이 같은 일반적인 인스턴스를 만들 수 있습니다. 이게 니가 찾고 있던거야?

+0

예 - 그게 내가 찾고있는 것입니다. 위대한 작품! –