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


Önkifejezés ion és a forrásgeneráció 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.
  • Futásidejű konfiguráció innen: JsonSerializerOptions.

Ezeket az információkat metaadatoknak nevezzük.

Önkifejezés ion

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

    A fordítás során összegyűjti a szerializáláshoz szükséges információkat, System.Text.Json és létrehoz egy forráskódfájlt, amely feltölti a JSON-szerződés metaadatait a kért típusokhoz.

  • 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 System.Text.Json közvetlenül használt Utf8JsonWriter optimalizált szerializációs kódot hoz létre. Ez az optimalizált vagy gyors elérésiút-kód növeli a szerializáció átviteli sebességé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:

Juttatás Önkifejezés ion 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. ✔️ ✔️
Kiküszöböli 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.

Juttatás Önkifejezés ion 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 tartozékokat. ✔️
Támogatja a szükséges tulajdonságokat. ✔️
Támogatja a csak init-only tulajdonságokat. ✔️
Csökkenti az indítási időt. ✔️ ✔️
Csökkenti a magánmemória használatát. ✔️ ✔️
Kiküszöböli 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. ✔️