Megosztás a következőn keresztül:


Visszatükrözés és forrásgenerálás a következőben: System.Text.Json

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.