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, "}");
    }
}

これを行う方法は with で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 に答える