26

を使用できることはわかっていますが、キャスト先の特定のクラスを決定するためにJsonConvert.DeserializeObject<T>(string)、オブジェクト(最初のパラメーターではない可能性があります) を調べる必要があります。_type基本的に、私がやりたいことは次のようなものです:

//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);
4

2 に答える 2

45

まず、JSON を JObject に解析します。_type次に、 LINQ to JSON を使用して属性を検索します。次に、値に応じて切り替え、次を使用してキャストしToObject<T>ます。

var o = JObject.Parse(text);
var jsonType = (String)o["_type"];

switch(jsonType) {
    case "something": return o.ToObject<Type>();
    ...
}
于 2012-04-19T04:20:43.597 に答える