Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a tükröződés és a forrásgenerálás közötti különbségeket ismerteti a szerializálással System.Text.Json kapcsolatban. Útmutatást is nyújt a forgatókönyvhöz legjobb megközelítés kiválasztásához.
Metaadat-gyűjtemény
Egy típus szerializálásához vagy deszerializálásához információra van szüksége arról, JsonSerializer hogyan férhet hozzá a típus tagjaihoz.
JsonSerializer a következő információkra van szüksége:
- Tulajdonságbeolvasók és mezők elérése szerializáláshoz.
- Konstruktorok, tulajdonsághalmazok és mezők elérése deszerializáláshoz.
- Információ arról, hogy mely attribútumokkal szabták testre a szerializálást vagy a deszerializálást.
- Futtatókörnyezet konfigurálása a következőből: JsonSerializerOptions.
Ezeket az információkat metaadatoknak nevezzük.
Visszaverődés
Alapértelmezés szerint JsonSerializer a metaadatokat futásidőben, tükröződés használatával gyűjti össze. Amikor JsonSerializer először kell szerializálnia vagy deszerializálnia egy típust, összegyűjti és gyorsítótárazza ezt a metaadatokat. A metaadat-gyűjtési folyamat időt vesz igénybe, és memóriát használ.
Forráslétrehozás
Alternatív megoldásként System.Text.Json használhatja a C#-forrásgenerálási funkciót a teljesítmény javítására, a magánmemória-használat csökkentésére és az szerelvény vágásának megkönnyítésére, ami csökkenti az alkalmazás méretét. Emellett bizonyos tükröződési API-k nem használhatók natív AOT-alkalmazásokban, ezért a forrásgenerálást kell használnia ezekhez az alkalmazásokhoz.
A forrásgenerálás két módban használható:
Metaadat-alapú mód
Fordítás közben a
System.Text.Jsonösszegyűjti a szerializáláshoz szükséges információkat, és létrehoz forráskódfájlokat, amelyek feltöltik a kérés szerinti típusok JSON-szerződés metaadatait.Szerializálás-optimalizálás (gyorsútvonal) mód
JsonSerializer a szerializálás kimenetét testre szabó funkciók, például az elnevezési szabályzatok és a hivatkozásmegőrzés, teljesítménybeli többletterhelést eredményeznek. Szerializálás-optimalizálási módban a System.Text.Json optimalizált szerializációs kódot hoz létre, amely közvetlenül használja a
Utf8JsonWriter. Ez az optimalizált vagy gyors útvonalú kód növeli a sorosítás átviteli teljesítményét.A gyorsútvonalú deszerializálás jelenleg nem érhető el. További információ: dotnet/runtime issue 55043.
A forráslétrehozáshoz System.Text.Json C# 9.0-s vagy újabb verzió szükséges.
Szolgáltatások összehasonlítása
Válassza ki a tükrözési vagy forrásgenerálási módokat az alábbi előnyök alapján, amelyeket mindegyik kínál:
| Előny | Visszaverődés | Forráslétrehozás (Metaadat-alapú mód) |
Forráslétrehozás (Szerializálás-optimalizálási mód) |
|---|---|---|---|
| Egyszerűbb a kód. | ✔️ | ❌ | ❌ |
| Egyszerűbb hibakeresés. | ❌ | ✔️ | ✔️ |
| Támogatja a nem nyilvános tagokat. | ✔️ | ✔️* | ✔️* |
| Támogatja az összes elérhető szerializálási testreszabást. | ✔️ | ❌ † | ❌ † |
| Csökkenti az indítási időt. | ❌ | ✔️ | ✔️ |
| Csökkenti a magánmemória használatát. | ❌ | ✔️ | ✔️ |
| Megszünteti a futásidejű tükröződést. | ❌ | ✔️ | ✔️ |
| Megkönnyíti a vágásmentes alkalmazásméret csökkentését. | ❌ | ✔️ | ✔️ |
| Növeli a szerializáció átviteli sebességét. | ❌ | ❌ | ✔️ |
* A forrásgenerátor támogat néhány nem nyilvános tagot, például belső típusokat ugyanabban a szerelvényben. † forrás által létrehozott szerződések a szerződés testreszabási API-val módosíthatók.