2015-06-29 3 views
0

Я не уверен, если я не получу большую картину, или я просто пропущу что-то, но в чем преимущества разбора JSON-String динамическому объекту?JSON to Dynamic Object vs. сильно типизированный объект

Если у меня есть класс, как этот

class Product 
{ 
    public string Name { get; set; } 
    public double Price { get; set; } 
    public string Category { get; set; } 
} 

и я использую HttpClient, чтобы получить объект, как этот

Product product = await response.Content.ReadAsAsync<Product>(); 

Что я извлечь выгоду из этого кода?

string content = await response.Content.ReadAsStringAsync(); 
dynamic product = JObject.Parse(content); 

Если я хочу использовать их мне нужно написать

product.Name 

С сильно типизированных apporach я по крайней мере иметь IntelliSense. Если служба меняет продукт, динамический подход мне не помогает, потому что мне все же нужно получить к нему доступ, как я уже упоминал выше.

Так что мне не хватает? Почему я должен использовать динамику или когда?

+0

Обычно я использую «динамику», когда меня не интересует десериализация определенного свойства. Поэтому, если это свойство является графом глубоких объектов, и я не использую его в бэкэнд, я скажу, что это динамический. В противном случае, я всегда имею тенденцию иметь строго типизированные десериализации, потому что это более полезно для меня в C#. Безопаснее пересекать диаграмму статического типизированного объекта. –

+0

Динамика разрешена во время выполнения, var во время компиляции. поэтому у вас нет интеллекта, потому что вы не знаете, чего ожидать. Я довольно новичок в C# sharp, так что все, что я могу сказать. Я использовал динамический себя на json, чтобы разобрать его и записать в базу данных, и это сработало в моем случае ... удача, я думаю. я бы пошел на тип класса;) – AbeCodes

+0

Что делать, если служба, которую вы потребляете, меняет формат данных? Используя 'dynamic', пока это поле существует, они могут изменять другие, не нарушая ваш код. Его также полезно, когда вы точно не знаете структуру данных входящих данных. Это не тот «тот или иной» вопрос, а решение, которое вы принимаете на основе требований к дизайну и знаний о системах и услугах восходящего потока. –

ответ

3

Вы будете всегда предпочитают использовать сильный тип по динамическому (производительность \ удобство).

Вот некоторые случаи вы хотели бы использовать динамический:

  1. Если вы хотите разобрать XML и не хотят работать с XElement х, XPath в т.д.

  2. COM Interop - It делает вещи очень легкими и приятными (попробуйте работать с Excel \ Word, и вы убедитесь).

  3. В некоторых случаях лучше использовать динамику вместо отражения.