@@ -81,6 +81,32 @@ public static byte[] SerializeValue<T>(T value, DataFormat format, out List<Obje
8181 return stream . Value . MemoryStream . ToArray ( ) ;
8282 }
8383
84+ public static byte [ ] SerializeValueWeak ( object value , DataFormat format , out List < Object > unityObjects , SerializationContext context = null )
85+ {
86+ using var stream = CachedMemoryStream . Claim ( ) ;
87+ var writer = GetCachedWriter ( out IDisposable cache , format , stream . Value . MemoryStream , context ) ;
88+
89+ try
90+ {
91+ if ( context != null )
92+ {
93+ SerializeValueWeak ( value , writer , out unityObjects ) ;
94+ }
95+ else
96+ {
97+ using var con = Cache < SerializationContext > . Claim ( ) ;
98+ writer . Context = con ;
99+ SerializeValueWeak ( value , writer , out unityObjects ) ;
100+ }
101+ }
102+ finally
103+ {
104+ cache . Dispose ( ) ;
105+ }
106+
107+ return stream . Value . MemoryStream . ToArray ( ) ;
108+ }
109+
84110 private static void SerializeValue < T > ( T value , IDataWriter writer , out List < Object > unityObjects )
85111 {
86112 using var unityResolver = Cache < UnityReferenceResolver > . Claim ( ) ;
@@ -90,6 +116,16 @@ private static void SerializeValue<T>(T value, IDataWriter writer, out List<Obje
90116 unityObjects = unityResolver . Value . GetReferencedUnityObjects ( ) ;
91117 }
92118
119+ private static void SerializeValueWeak ( object value , IDataWriter writer , out List < Object > unityObjects )
120+ {
121+ using var unityResolver = Cache < UnityReferenceResolver > . Claim ( ) ;
122+ writer . Context . IndexReferenceResolver = unityResolver . Value ;
123+ var valueType = value . GetType ( ) ;
124+ Serializer . Get ( valueType ) . WriteValueWeak ( value , writer ) ;
125+ writer . FlushToStream ( ) ;
126+ unityObjects = unityResolver . Value . GetReferencedUnityObjects ( ) ;
127+ }
128+
93129 public static void SerializeValue ( object value , Type valueType , IDataWriter writer )
94130 {
95131 Serializer . Get ( valueType ) . WriteValueWeak ( value , writer ) ;
0 commit comments