0

我正在开发一个 JSON API 客户端。目标是使用方法ToJSON(..)和创建一个基类型FromJSON(..),后续类可以从中继承。

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。

4

1 回答 1

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);
}
于 2013-02-05T23:54:25.947 回答