Я пытаюсь разобрать JSON с помощью библиотеки JSon.Net. Документация кажется немного скудной, и я не понимаю, как выполнить то, что мне нужно. Вот формат JSON, который мне нужно проанализировать.
{
"displayFieldName" : "OBJECT_NAME",
"fieldAliases" : {
"OBJECT_NAME" : "OBJECT_NAME",
"OBJECT_TYPE" : "OBJECT_TYPE"
},
"positionType" : "point",
"reference" : {
"id" : 1111
},
"objects" : [ {
"attributes" : {
"OBJECT_NAME" : "test name",
"OBJECT_TYPE" : "test type"
},
"position" : {
"x" : 5,
"y" : 7
}
} ]
}
Единственные данные, которые мне действительно нужны, - это содержимое массива объектов. Могу ли я проанализировать это с помощью чего-то вроде JSonTextReader и просто вытащить то, что я хочу, например OBJECT_TYPE и положение x и y? Я не могу понятьJSonTextReader
работать так, как я хочу, и я практически не нахожу примеров его использования.
Похоже, что сначала сериализация, а затем использование LINQ с моим объектом было бы идеальным, и каждый пример, который я нахожу, обсуждает сначала сериализацию JSON, но я не уверен, как я бы создал объект для этой структуры. В частности, массив объектов, который должен быть чем-то вроде списка пар объектов атрибутов и позиций. Я понятия не имею, как бы я закодировал свой объект, чтобы JSon.Net знал, как его сериализовать.
Я думал, что могу написать свой собственный простой синтаксический анализатор, чтобы просто вытащить все, что мне нужно, в объект атрибутов, который я создал, но мне не повезло.
Надеюсь, все это имеет смысл, есть идеи?
источник
XElement
, который позволил бы мне использовать LINQ для объектов JSON?Изменить: Спасибо, Марк, прочитайте проблему структуры и класса, и вы правы, спасибо!
Я обычно использую следующий метод для того, что вы описываете, используя статический метод JSon.Net:
Ссылка: Сериализация и десериализация JSON с помощью Json.NET
Для списка объектов, могу ли я предложить использовать общие списки, составленные из вашего собственного небольшого класса, содержащего
attributes
иposition
class. Вы можете использоватьPoint
структуруSystem.Drawing
(System.Drawing.Point
илиSystem.Drawing.PointF
для чисел с плавающей запятой) для X и Y.После создания объекта гораздо легче получить нужные данные, чем анализировать текст, на который вы иначе смотрите.
источник
(Этот вопрос был высоко оценен поисковой системой, но в итоге я выбрал другой подход. Добавил ответ на этот старый вопрос на случай, если другие люди с похожими вопросами прочитают это)
Вы можете решить эту проблему с помощью Json.Net и создать метод расширения для обработки элементов, которые вы хотите зациклить:
А затем получить доступ к данным следующим образом: (сценарий: запись в консоль):
источник
источник
[
или]
(ограничивающие массивы или структуры списков).Вы используете
JSON
класс, а затем вызываетеGetData()
функцию.источник