Ö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. | ❌ | ❌ | ✔️ |
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: