В чем разница между JsonWriter и JsonTextWriter? - PullRequest
0 голосов
/ 11 июня 2019

В чем разница между JsonWriter и JsonTextWriter?

https://www.newtonsoft.com/json/help/html/WriteJsonWithJsonTextWriter.htm

using (JsonWriter writer = new JsonTextWriter(sw))
{
    writer.Formatting = Formatting.Indented;

    writer.WriteStartObject();
    writer.WritePropertyName("CPU");
    writer.WriteValue("Intel");

не должно ли быть JsonTextWriter writer = new JsonTextWriter(sw) для согласованности?

Ответы [ 3 ]

1 голос
/ 11 июня 2019

Как вы могли видеть из документации, JsonTextWriter получено из JsonWriter

JsonReader и JsonWriterнизкоуровневые классы и предназначены в основном для внутреннего использования Json.NET.Для быстрой работы с JSON рекомендуется использовать сериализатор - сериализацию и десериализацию JSON - или использование LINQ to JSON.

и

JsonTextReader и JsonTextWriterиспользуется для чтения и записи текста JSON.JsonTextWriter имеет ряд настроек для управления форматированием JSON при записи.Эти параметры включают форматирование, знак отступа, количество отступов и символ кавычки.

Что касается вопроса

, не должно ли это быть JsonTextWriter writer = new JsonTextWriter (sw)для согласованности

в этом примере было достаточно просто использовать инициализированный тип в качестве базового класса, так как демонстрационная программа не нуждалась в большем количестве функциональных возможностей, чем было представлено в базовом классе

0 голосов
/ 11 июня 2019

Я не уверен, но может быть, это причина для этого. JsonTextWriter имеет ряд настроек для управления форматированием JSON при его записи. Представляет средство записи, обеспечивающее быстрый, не кэшированный, прямой способ генерирования данных JSON.

JsonTextWriter является подклассом класса jsonText. поэтому во время создания объекта мы должны написать так

(JsonWriter writer = new JsonTextWriter(sw))
0 голосов
/ 11 июня 2019

JsonWriter - абстрактный базовый класс. Определение переменной этого типа аналогично использованию интерфейса; абстрактный класс и интерфейс предоставляют абстрактный контракт, который определяет минимально необходимые члены классов, которые их реализуют.

не должен ли это быть JsonTextWriter writer = new JsonTextWriter (sw) для Консистенция

Определяя переменную writer как JsonWriter, кодер сигнализирует, что они не собираются использовать какие-либо элементы, уникальные для реализации (JsonTextWriter). Они только намерены использовать участников, которые принадлежат договору. Это означает, что любой код, который вызывает членов в этом writer (без приведения), будет скомпилирован и должен продолжать работать, если вы хотите изменить реализацию на какой-то другой класс, производный от JsonWriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...