2014-01-20 4 views
5

Я только что удержал JSON.NET, и это было прекрасно до сих пор.Deserциализация неизвестного типа в 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 поддерживает такую ​​функциональность?

+0

может быть 'GetType()'? – i3arnon

+0

Это была моя первая мысль. Тем не менее, тип «Newtonsoft.Json.Linq.JObject' – Maeh

+2

JSON - простой формат и не содержит метаданных при сериализации. Вы ДОЛЖНЫ знать, какой тип вы десериализуете. –

ответ

10

вы можете использовать dynamic типа

JsonConvert.DeserializeObject<dynamic>(JSONtext) 
+0

'Console.WriteLine (JsonConvert.DeserializeObject (serializedMessage) .GetType());' просто дает мне 'Newtonsoft.Json.Linq.JObject' – Maeh

+0

Я думаю, что Json не может распознать тип объекта. вам нужно проверить его вручную. – Omidam81

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 
      } 
    } 

+0

это приятное решение! – igorGIS

Смежные вопросы