public void Serialize(Commit commit, object[] events) { Expect.NotNull(commit, "commit"); Expect.NotEmpty(events, "events"); var position = 0; commit.PayloadLayout = new PayloadLayout(events.Length); using (var stream = new MemoryStream(UsualCommitSize * events.Length)) { for (int i = 0; i < events.Length; i++) { var evt = events[i]; var evtType = evt.GetType(); var evtTypeId = CreateTypeId(evtType); var concreteType = eventFactory.GetConcreteType(evtType); var bytes = JsonSerializer.SerializeToUtf8Bytes(evt, concreteType, options); ////var s = Encoding.UTF8.GetString(bytes); stream.Write(bytes, 0, bytes.Length); commit.PayloadLayout.Add(position, bytes.Length, evtTypeId); if (i != events.Length - 1) { stream.WriteByte(NewLineByte); stream.WriteByte(NewLineByte); position += bytes.Length + 2; } } commit.Payload = stream.ToArray(); } commit.ItemsCount = (short)events.Length; commit.SerializerId = SerializerId; }
public override Type BindToType(string assemblyName, string typeName) { Expect.NotEmpty(assemblyName, "assemblyName"); Expect.NotEmpty(typeName, "typeName"); var type = Type.GetType(typeName + ", " + assemblyName); if (type == null) { throw new Exception($"Failed to create type '{typeName}, {assemblyName}'"); } if (type.IsInterface) { var concreteType = eventFactory.GetConcreteType(type); return(concreteType); } return(type); }