Próbuję przeanalizować niektóre JSON przy użyciu biblioteki JSon.Net. Dokumentacja wydaje się trochę skąpa i jestem zdezorientowany, jak osiągnąć to, czego potrzebuję. Oto format JSON, który muszę przeanalizować.
{
"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
}
} ]
}
Jedyne dane, których naprawdę potrzebuję, to zawartość tablicy obiektów. Czy mogę przeanalizować to za pomocą czegoś takiego jak JSonTextReader i po prostu wyciągnąć rzeczy, które chcę, takie jak OBJECT_TYPE i pozycja x i y? Wydaje się, że nie mogę JSonTextReader
pracować tak, jak chcę, i nie znajduję przykładów użycia tego narzędzia.
Wygląda na to, że najpierw serializacja, a następnie użycie LINQ z moim obiektem byłoby idealne, a każdy znaleziony przykład omawia najpierw serializację JSON, ale nie jestem pewien, jak zbudować obiekt dla tej struktury. W szczególności tablica obiektów, która musiałaby być czymś w rodzaju listy par atrybutów i obiektów pozycji. Nie mam pojęcia, jak zakodowałbym mój obiekt, więc JSon.Net wiedziałoby, jak to serializować.
Pomyślałem, że mógłbym napisać własny prosty parser, aby po prostu wyciągnąć wszystko, czego potrzebuję, do obiektu atrybutów, który utworzyłem, ale nie mam szczęścia.
Mam nadzieję, że to wszystko ma sens, jakieś pomysły?
źródło
XElement
tego, który pozwoliłby mi używać LINQ na obiektach JSON?Edycja: Dzięki Marc, poczytaj o problemie struct vs class i masz rację, dziękuję!
Zwykle używam następującej metody robienia tego, co opisujesz, używając statycznej metody JSon.Net:
Link: serializacja i deserializacja JSON z Json.NET
W przypadku listy obiektów mogę zasugerować użycie ogólnych list utworzonych z własnej małej klasy zawierającej
attributes
iposition
klasy. Możesz użyćPoint
struktury wSystem.Drawing
(System.Drawing.Point
lubSystem.Drawing.PointF
dla liczb zmiennoprzecinkowych) dla siebie X i Y.Po utworzeniu obiektu znacznie łatwiej jest uzyskać dane, których szukasz, w porównaniu z analizą tekstu, na którą inaczej patrzysz.
źródło
(To pytanie pojawiło się wysoko w wynikach wyszukiwania, ale ostatecznie zastosowałem inne podejście. Dodanie odpowiedzi na to stare pytanie na wypadek, gdyby przeczytały to inne osoby z podobnymi pytaniami)
Możesz rozwiązać ten problem za pomocą Json.Net i utworzyć metodę rozszerzenia do obsługi elementów, które chcesz zapętlić:
A następnie uzyskaj dostęp do danych w następujący sposób: (scenariusz: pisanie do konsoli):
źródło
źródło
[
lub]
(ograniczając struktury tablic lub list).Używasz
JSON
klasy, a następnie wywołujeszGetData()
funkcję.źródło