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));
        }
Exemplo n.º 3
0
 public object Deserialize(Type ExpectedType, byte[] Data)
 {
     return(BondSerializer.Deserialize(ExpectedType, new MemoryStream(Data)));
 }