0

編集:答えが見つかりました(コメントで)。

現在、System.Web.Http.ApiControllerサーバーのメモリ内のオブジェクトにアクセスするために使用しています。これらのオブジェクトは、任意のタイプを持つことができます。

次のAPIコントローラーを使用してそれらを受け取ります:(サンプルコード。完全なソースコードではありません)

public class DataController : ApiController
{
    Dictionary<String, Object> _dataDict;

    public object Get(string dataPath)
    {
        Object result = _dataDict[dataPath];
        return result;
    }
}

これは、Web API を介して JSON ですべてのオブジェクトを受け取るのに問題なく機能します。問題は、POST を使用して新しいオブジェクトを送信することです。

public class DataController : ApiController
{
    Dictionary<String, Object> _dataDict;

    public object Get(string dataPath)
    {
        Object result = _dataDict[dataPath];
        return result;
    }
    public void Post(string dataPath, Object obj)
    {
        _dataDict[dataPath] = obj;
    }
}

Object は、実際の逆シリアル化されたオブジェクトではなく、動的オブジェクトになります。次のような具体的なメソッドを実装します。

public object Post(string dataPath, MyClass instance)
{
    _dataDict[dataPath] = instance;
}

正常に動作します。悲しいことに、私は実行時に使用されるすべての型を知っているわけではありませんが、dataPath を分析することでそれがどの型であるかを知っており、実行時に Type インスタンスを取得できます。正しい Type を使用して正しいインスタンスを作成するように、フォーマッタまたは ApiController (実際にインスタンスを作成したのは誰なのかわかりません) に指示するにはどうすればよいですか?

を使用してSystem.Net.Http.Formatting.JsonMediaTypeFormatterいます。

前もって感謝します。

デブラズ

4

1 に答える 1

1

まあ、実際にはJObjectであり、動的オブジェクトではありません。恥ずかしい答えは次のとおりです。

public void Post(string dataPath, JObject obj)
{
    Type myClass = figureOutMyTypeByParsingThePath(dataPath);
    _dataDict[dataPath] = obj.ToObject(myClass);
}
于 2013-10-04T01:09:31.363 に答える