2013-02-05 2 views
0

JSON API 클라이언트에서 작업 중입니다. 목표는 후속 클래스가 상속 할 수있는 ToJSON(..)FromJSON(..) 메서드를 사용하여 기본 유형을 만드는 것입니다.JSON을 C# /. NET4 기본 유형으로 비 직렬화

ToJSON(..)은 Scott Guthrie의 블로그 기사 (http://bit.ly/Ppgd3)를 따르면 비교적 간단합니다. 나는 FromJSON(..)으로 고투하고있다. 여기에 기본 코드입니다 : 이제

public class BaseType 
{ 
    public virtual void FromJson(System.Type type, string input) 
    { 
     // What? How? 
    } 

    public virtual string ToJson() 
    { 
     JavaScriptSerializer serial = new JavaScriptSerializer(); 
     return serial.Serialize(this); 
    } 

    public virtual string ToJson(string verb) 
    { 
     JavaScriptSerializer serial = new JavaScriptSerializer(); 
     string value = serial.Serialize(this); 
     return string.Concat("{", "\"", verb.Trim(), "\":", value, "}"); 
    } 
} 

Deserialize(..) 함께 할 수있는 방법과 그 클래스 외부에서 작동합니다. 내 질문은 아래의 FromJSON(..) 아래에 위의 클래스 내에서 Deserialize(..) 명령을 작동시키는 방법을 상속 가능한 방식입니다.

public class InheritedObject : BaseType { } 

System.Web.Script.Serialization.JavaScriptSerializer serial = new System.Web.Script.Serialization.JavaScriptSerializer(); 
InheritedObject foo = serial.Deserialize<InheritedOjbect>(jsonString); 

언어

는 C 번호는 프레임 워크는 .NET 4.0입니다, 그리고 IDE는 제네릭이 아마이 경우에 도움이 될 2012 년

+0

'from *'메소드는 일반적으로'static'입니다. 입력으로부터의 * 새로운 * 객체 –

답변

1

비주얼 스튜디오에게 있습니다.

public class BaseType<T> where T : new() 

는 다음과 같이 상속 :

public class InheritedObject : BaseType<InheritedObject> 

를 또는 정적 방법합니다

public virtual T FromJson<T>(string input) 
{ 
    JavaScriptSerializer serial = new JavaScriptSerializer(); 
    return serial.Deserialize<T>(input); 
} 

당신과 같이 클래스 수준에서 T를 정의해야

public static T FromJson<T>(string input) where T : new() 
{ 
    JavaScriptSerializer serial = new JavaScriptSerializer(); 
    return serial.Deserialize<T>(input); 
} 
+0

* 가상 *'fromJson'이 불려지는 객체는 무엇입니까? –

+1

모든 사실을 가지고 있지는 않지만 두 가지 옵션을 모두 제공했지만, 제한된 코드에서 볼 수있는 것부터 정적 인 것이 더 합리적입니다. –

+0

아름다운. 고맙습니다. –

관련 문제