Mam "prosty" scenariusz: przeczytaj plik JSON, przefiltruj lub zmień niektóre wartości i zapisz wynikowy json bez zmiany oryginalnego formatowania.C# Manipulowanie danymi JSON
Tak na przykład, aby to zmienić:
{
"type": "FeatureCollection",
"crs": {
"type": "EPSG",
"properties": {
"code": 28992
}
},
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
149886.192,
374554.705
],
[
149728.583,
374473.112
],
[
149725.476,
374478.215
]
]
]
}
}
]
}
Do tego:
{
"type": "FeatureCollection",
"crs": {
"type": "EPSG",
"properties": {
"code": 28992
}
},
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates":
[
149886.192,
374554.705
]
}
}
]
}
Próbowałem Json.NET przez newtonsoft m.in. lecz tylko to znajdę to:
- odczytać do obiektu
- napisać obiekt do json
Ale brakuje mi kroku "zmień obiekt". Jakieś wskazówki?
Aktualizacja
Oto, co starałem dotąd:
JToken contourManifest = JObject.Parse(input);
JToken features = contourManifest.SelectToken("features");
for (int i = 0; i < features.Count(); i++)
{
JToken geometry = features[i].SelectToken("geometry");
JToken geoType = geometry.SelectToken("type");
JToken coordinates = geometry.SelectToken("coordinates");
geoType = "Point";
}
Ale to tylko zmienia wartość zmiennej geoType. Spodziewałem się również zmiany wartości wewnątrz geometrii. Potrzebuję odniesienia, a nie kopii! czy to możliwe?
Aktualizacja
Jestem obecnie poza tym projekcie, ale chciałbym dać moje komentarze do Główni odpowiadający. Chociaż lubię prostotę Shahin, podoba mi się bardziej formalne podejście L.B. trochę lepiej. Osobiście nie lubię używać wartości łańcuchowych jako kodu funkcjonalnego, ale to tylko ja. Gdybym mógł przyjąć obie odpowiedzi: chciałbym. Sądzę, że Shahin będzie musiał zrobić to z powodu "sprawiedliwego" uprowadzenia.
Nie przepracowałem tego, ale wygląda na to, że użyłbym tego typu dynamicznego. Zobacz tutaj: http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object – McGarnagle