2016-12-11 2 views
1

Я хочу десериализовать строку JSON, которая не знает ее тип, для объекта типа Object и иметь доступ к его свойствам с помощью отражения. , когда я использовал этотDeserialize строка JSON для объекта C# с использованием Json.NET

object myObject = JsonConvert.DeserializeObject("{\'Id\':\'1\'}"); 

тип myObject имеет типа JObject, и я не в состоянии получить доступ к его свойствам с помощью отражения.

есть ли способ сделать это с помощью Json.net или любого другого десериализатора JSON?

+1

Это похоже дубликата это: HTTP://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – scotru

+1

Или это с помощью JSON.NET: http://stackoverflow.com/questions/4535840/deserialize-json-object-into- dynamic-object-using-json-net – scotru

+0

@scotru Я тоже пробовал динамику. Я хочу сказать, что мне нужно получить доступ к своим свойствам с помощью отражения. генерируемый динамический объект также имеет тип JObject –

ответ

2

Я думаю, что вы можете десериализации объекта в либо Dictionary<string,string> или expandoobject (также литьевой к IDictionary<string,object>) и тогда вам не нужно использовать, чтобы получить отражение в свойствах, вы можете получить их через словарь.

См: Deserialize Dynamic Json string using Newtonsoft JSON.NET

+0

{"Id": "1"} - всего лишь образец. Свойства могут быть любого типа, могут быть нового объекта –

+0

Тогда вам будет лучше использовать динамический, я бы сказал – gmn

1

Это не позволяет использовать отражение в-се но ExpandoObject действительно позволяет вам перебрать свойства:

 string json = "{\'Id\':\'1\'}"; 
     var converter = new ExpandoObjectConverter(); 
     dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, converter); 

     IDictionary<string, object> dict = (IDictionary<string, object>)obj; 
     foreach (string key in dict.Keys) 
     { 
      Console.WriteLine(key); 
     } 
Смежные вопросы