static bool TrySerializeAdapter <TValue>(IJsonAdapter adapter, JsonWriter writer, ref TValue value)
        {
            if (adapter is IJsonAdapter <TValue> typed)
            {
                using (var buffer = new JsonStringBuffer(16, Allocator.TempJob))
                {
                    typed.Serialize(buffer, value);

                    unsafe
                    {
                        writer.AsUnsafe().WriteValueLiteral(buffer.GetUnsafePtr(), buffer.Length);
                    }
                }
                return(true);
            }

            if (adapter is Adapters.Contravariant.IJsonAdapter <TValue> typedContravariant)
            {
                using (var buffer = new JsonStringBuffer(16, Allocator.TempJob))
                {
                    typedContravariant.Serialize(buffer, value);

                    unsafe
                    {
                        writer.AsUnsafe().WriteValueLiteral(buffer.GetUnsafePtr(), buffer.Length);
                    }
                }
                return(true);
            }

            return(false);
        }
Example #2
0
        public static void ToJson <T>(JsonStringBuffer buffer, T value, JsonSerializationParameters parameters = default)
        {
            using (var writer = new JsonWriter(parameters.InitialCapacity, Allocator.Temp, new JsonWriterOptions {
                Minified = parameters.Minified, Simplified = parameters.Simplified
            }))
            {
                ToJson(writer, value, parameters);

                unsafe
                {
                    buffer.Write(writer.AsUnsafe().GetUnsafeReadOnlyPtr(), writer.AsUnsafe().Length);
                }
            }
        }