在JSON.NET中反序列化未知类型

时间:2014-01-20 23:58:56

标签: c# json.net

我抓住了JSON.NET,到目前为止一直很棒。

但是,在反序列化时,我无法确定如何确定序列化对象的type

如何确定要投射它的对象类?

为了澄清我的问题,让我们说我想这样做

string json = <<some json i do'nt know>>
var data = JsonConvert.DeserializeObject(json);
if (data is Person)
{
   //do something
}
else if (data is Order)
{
   //do something else
}

Json.NET是否支持这种功能?

3 个答案:

答案 0 :(得分:14)

您可以使用dynamic类型

JsonConvert.DeserializeObject<dynamic>(JSONtext)

答案 1 :(得分:3)

它可以帮到你

IDictionary < string, JToken > Jsondata = JObject.Parse(yourJsonString);
   foreach(KeyValuePair < string, JToken > element in Jsondata)
    {
           string innerKey = element.Key;
            if (element.Value is JArray)
             {
                  // Process JArray
             }
            else if (element.Value is JObject) 
            { 
                  // Process JObject
            }
   }

答案 2 :(得分:0)

如果您控制序列化,则可以使用TypeNameHandling设置

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };
var toBeSerialized = settings; // use the settings as an example data to be serialized

var serialized = JsonConvert.SerializeObject(toBeSerialized, Formatting.Indented, settings);
var deserialized = JsonConvert.DeserializeObject(serialized, settings);

var deserializedType = deserialized.GetType().Name; // JsonSerializerSettings