2013-02-05 30 views
0

我正在使用JSON API客户端。目标是使用方法ToJSON(..)FromJSON(..)创建一个基类型,后续类可以从中继承。在C#/ .NET4中反序列化基本类型中的JSON

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(..)的方式和工作类外。我的问题是如何让Deserialize(..)命令在上述类的FromJSON(..)下以可继承的方式工作。

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是Visual Studio的2012年

+0

'from *'方法通常是'static',因为它们创建来自输入的* new *对象 –

回答

1

仿制药可能会在这种情况下帮助。

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

你将不得不在类级别定义t等这样:

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

然后继承像这样:

public class InheritedObject : BaseType<InheritedObject> 

或者,使该方法静:

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

哪个对象是来自Json的* virtual *'调用的?它只是有意义的,使它静态 –

+1

我给了这两个选项,以防我们没有所有的事实,但从我提供的有限代码中可以看到,静态更有意义。 –

+0

美丽。谢谢。 –