Разбор / кодирование JSON без десериализации / сериализации классов - PullRequest
1 голос
/ 12 марта 2012

Я ищу JSON-анализатор и кодировщик для .NET, который может анализировать JSON в его собственную структуру данных, по которой я могу затем перемещаться, в отличие от прямой десериализации его в класс. В Java я использую Jettison JSONObject и JSONArray , который чрезвычайно прост в использовании.

Есть ряд причин, по которым я не хочу (де) сериализовать:

  1. Сериализаторы, как правило, добавляют метаданные в JSON и требуют, чтобы метаданные для десериализации (например, fastJSON и JSON.NET добавляли информацию о типе).
  2. Мне не нужно создавать кучу классов для обработки всех типов данных. Кроме того, я хочу иметь возможность игнорировать поля, которые мне не интересны, а не добавлять к ним свойства.

Есть ли что-нибудь доступное или мне нужно перенести подмножество Jettison?

1 Ответ

0 голосов
/ 12 марта 2012

Недостатки сериализации, на которые вы указали, на самом деле отсутствуют, по крайней мере, в случае JSON.NET:

  1. JSON.NET по умолчанию не добавляет метаданные.Вы можете сказать, чтобы он добавлял метаданные, если вам это нужно (например, когда одно свойство может содержать значения разных типов), но это необязательно.
  2. Вы заменяете трудность создания классов на трудность работы сСтруны и броски, и я думаю, что это намного хуже.Кроме того, вы можете игнорировать поля, которые вам не интересны, просто не добавляйте их в свои типы.

Но, если вы действительно хотите это сделать, вы можете.Эквивалентными типами являются JObject и JArray, поэтому, если вы хотите десериализовать некоторый объект, используйте:

JObject obj = JsonConvert.DeserializeObject<JObject>(json);

В качестве другого варианта вам совсем не нужно указывать нужный типМуравей вернет либо JObject, либо JArray:

object objectOrArray = JsonConvert.DeserializeObject(json);
...