public static IGenericSerializable FromByteArray(ArraySegment <byte> Data) { if (Data.Count == 0) { return(null); } var Ref = (SerializationGenericReference)BondSerializer.Deserialize(typeof(SerializationGenericReference), new ArraySegmentReaderStream(Data)); var Type = BondSerializationUtil.ParseTypeIdentifierString(Ref.Type); return((IGenericSerializable)BondSerializer.Deserialize(Type, new MemoryStream(Ref.Data.ToArray()))); }
public static GrainReference FromByteArray(ArraySegment <byte> Data, IGrainReferenceConverter GrainReferenceConverter) { if (Data.Count == 0) { return(null); // I actually think this never happens, because Bond simply leaves fields with default values out } var Ref = (SerializationGrainReference)BondSerializer.Deserialize(typeof(SerializationGrainReference), new ArraySegmentReaderStream(Data)); var s = new StringBuilder(); s.AppendFormat("{0:x16}{1:x16}{2:x16}", Ref.IdN0, Ref.IdN1, Ref.TypeCodeData); if (Ref.KeyExt != null) { s.Append("+"); s.Append(Ref.KeyExt); } string IdStr = s.ToString(); string KeyString; if (Ref.ObserverReferenceId != null) { KeyString = String.Format("{0}={1} {2}={3}", GRAIN_REFERENCE_STR, IdStr, OBSERVER_ID_STR, Ref.ObserverReferenceId.ToString()); } else if (Ref.SystemTargetSiloAddress != null) { KeyString = String.Format("{0}={1} {2}={3}", GRAIN_REFERENCE_STR, IdStr, SYSTEM_TARGET_STR, Ref.SystemTargetSiloAddress); } else if (Ref.GenericArgs != null) { KeyString = String.Format("{0}={1} {2}={3}", GRAIN_REFERENCE_STR, IdStr, GENERIC_ARGUMENTS_STR, ConvertBackToGenericArgsString(Ref.GenericArgs)); } else { KeyString = String.Format("{0}={1}", GRAIN_REFERENCE_STR, IdStr); } return(GrainReferenceConverter.GetGrainFromKeyString(KeyString)); }
public object Deserialize(Type ExpectedType, byte[] Data) { return(BondSerializer.Deserialize(ExpectedType, new MemoryStream(Data))); }