<PackageReference Include="System.Text.Json" Version="8.0.0" />

PreserveReferenceResolver

using System.Collections.Generic; namespace System.Text.Json.Serialization { internal sealed class PreserveReferenceResolver : ReferenceResolver { private uint _referenceCount; private readonly Dictionary<string, object> _referenceIdToObjectMap; private readonly Dictionary<object, string> _objectToReferenceIdMap; public PreserveReferenceResolver(bool writing) { if (writing) _objectToReferenceIdMap = new Dictionary<object, string>(System.Collections.Generic.ReferenceEqualityComparer.Instance); else _referenceIdToObjectMap = new Dictionary<string, object>(); } public override void AddReference(string referenceId, object value) { if (!JsonHelpers.TryAdd(_referenceIdToObjectMap, referenceId, value)) ThrowHelper.ThrowJsonException_MetadataDuplicateIdFound(referenceId); } public override string GetReference(object value, out bool alreadyExists) { if (_objectToReferenceIdMap.TryGetValue(value, out string value2)) alreadyExists = true; else { _referenceCount++; value2 = _referenceCount.ToString(); _objectToReferenceIdMap.Add(value, value2); alreadyExists = false; } return value2; } public override object ResolveReference(string referenceId) { if (!_referenceIdToObjectMap.TryGetValue(referenceId, out object value)) ThrowHelper.ThrowJsonException_MetadataReferenceNotFound(referenceId); return value; } } }