내가 간단한 클래스과 같이이 : 클래스는 매개 변수없이 인스턴스화하는 경우인스턴스화 클래스 변수
public class MyClass
{
public string String1;
public string String2;
public MyClass()
{
}
public MyClass(string Json)
{
}
}
난을 통과 할 때, 그냥, 그러나 .. 빈 객체를 찾아온다 생성자에 대한 JSON 문자열 JSON에서 모든 속성을 해당 값과 같게 설정하려고합니다. 내가 생성자 자체 내에서이를 싶습니다
string JsonArray = Base64.Decode(HttpContext.Current.Request.QueryString["songinfo"]);
MyClass tmp = JsonConvert.DeserializeObject<MyClass>(JsonArray);
MyClass InstantiatedClass = tmp;
InstantiatedClass 지금은 완전히 채워진 오브젝트입니다 .. 그러나 :
나는 다음과 같이 Newtonsoft에 의해 JSON.NET를 사용하여 클래스의 외부에서 수행 한 ,하지만 그것을 할 수있는 방법을 알아낼 수 없습니다 ..
나는 this = JsonConvert.DeserializeObject<MyClass>(Json)
설정과 같은 것을 시도했지만 물론, this
은 읽기 전용입니다.
나는 JSON을 구문 분석하고 각 변수를 적절한 JSON 속성 값으로 설정하여이를 수행 할 수 있음을 알고 있지만 클리너이므로이 방법으로 수행하려고합니다.
public class MyClass
{
public string String1;
public string String2;
public MyClass()
{
}
public static MyClass Instance(string json)
{
return new JsonConvert.DeserializeObject<MyClass>(json);
}
}
을 그러나 이것은 당신이 달성하려는 작업에 해결 단지 어떤 종류 :
물론 'MyClass'가'struct' 인 경우, this = JsonConvert.DeserializeObject (Json);을 사용하는 것이 효과적이었을 것입니다. –
생성자 안에 두 번째 인스턴스를 만든 다음 리플렉션을 사용하여 모든 속성을 복제하는 유일한 방법이 있습니다. 답변에 언급 된 정적 팩토리 메소드는 사용자가 묻는 것과 비교하여 차선책이며 더 나은/더 나은 솔루션입니다. – Mark
귀하의 질문에 대한 답변이 없기 때문에 귀하는 이미 일부 내용이 있지만 귀하의 용어를 수정하고 싶다고 생각됩니다. 변수를 "인스턴스화"하지 마십시오. 인스턴스화 할 수있는 유일한 유형은 해당 유형의 오브젝트를 작성하여 유형입니다. 당신이하고 싶은 것은 타입의 인스턴스 생성 인 객체를 가지고 그 변수들을 "초기화"하는 것입니다. – jmcilhinney