public void WriteObjectWithReferenceId(Stream stream, object obj, ReferenceTypeHandler handler) { if (this.idByReferences.TryGetValue(obj, out string id)) { stream.WriteString(id); return; } id = Guid.NewGuid().ToString(); this.idByReferences.Add(obj, id); stream.WriteString(id); handler.WriteObjectWithoutReference(stream, obj, this); }
public object GetObject(Stream stream, string id, ReferenceTypeHandler handler) { if (this.referenceByIds.TryGetValue(id, out object reference)) { return(reference); } object obj = handler.ReadWithoutReference(stream); this.referenceByIds.Add(id, obj); handler.Fill(stream, obj, this); return(obj); }