にキャストする方法JsonConvert.DeserializeObject<T>(string)
を使用することができますが、キャストする特定のクラスを決定するためにオブジェクトの_type
(最初のパラメータではないかもしれません)を覗き込む必要があります。 。基本的には、私がしたいことは次のようなものです:JSON.NetのJObjectをT
//Generic JSON processor for an API Client.
function MyBaseType ProcessJson(string jsonText)
{
var obj = JObject.Parse(jsonText);
switch (obj.Property("_type").Value.ToString()) {
case "sometype":
return obj.RootValue<MyConcreteType>();
//NOTE: this doesn't work...
// return obj.Root.Value<MyConcreteType>();
...
}
}
...
// my usage...
var obj = ProcessJson(jsonText);
var instance = obj as MyConcreteType;
if (instance == null) throw new MyBaseError(obj);
私は主に私ができることなら二回JSONを解析しないようにしたいのですことを指摘すべきです。 – Tracker1
タイプ情報を持つJSONのどんなkinfを使用していますか? JSONは、プロパティと値のペアの表記です(値は配列またはプロパティ値のペアを含む別の型になります)。しかし、タイプ情報を持つJSONは見たことがありません。 "文字列化"してJSONにオブジェクトすると、すべての型情報が失われます。 – JotaBe
@ JotaBeそれは私が取り組んでいるプロジェクトで使用するためのクライアントを構築している公開された安らかなAPIの一部です。 JSONを介してAPIを公開してすべてのレスポンスをオブジェクトにラップすると、一番外側のレスポンスは常にオブジェクト(エラー応答の場合でも)になり、そのオブジェクトで何らかの種類の情報が保持されます。クライアントレベルでの処理エラー対予期された応答の面では本当に役に立ちます... – Tracker1