Пример #1
0
        public static string ToHex(this ISerializedType st)
        {
            BytesList list = new BytesList();

            st.ToBytes(list);
            return(list.BytesHex());
        }
Пример #2
0
        public static string ToDebuggedHex(this ISerializedType st)
        {
            BytesList list = new BytesList();

            st.ToBytes(list);
            return(list.RawList().Aggregate("", (a, b) = \ > \ a + ',' + B16.Encode(b)));
        }
Пример #3
0
        public void AddLengthEncoded(ISerializedType value)
        {
            var bytes = new BytesList();

            value.ToBytes(bytes);
            AddLengthEncoded(bytes);
        }
Пример #4
0
 public SimpleSerializedObject(T data, Type dataType, ISerializedType serializedType)
 {
     Assert.NotNull(data, () => "Data for a serialized object cannot be null");
     Assert.NotNull(serializedType, () => "The type identifier of the serialized object");
     _data     = data;
     _dataType = dataType;
     _type     = serializedType;
 }
Пример #5
0
        public static void Serialize(Serializer so, string fieldName, object value)
        {
            var fieldCoordinates = InverseFieldsMap[fieldName];
            var typeBits         = fieldCoordinates.Key;
            var fieldBits        = fieldCoordinates.Value;
            var tagByte          = (typeBits < 16 ? typeBits << 4 : 0) | (fieldBits < 16 ? fieldBits : 0);

            if (value is string str)
            {
                if (fieldName == "LedgerEntryType")
                {
                    value = (int)Enum.Parse(typeof(LedgerEntryType), str);
                }
                else if (fieldName == "TransactionResult")
                {
                    value = (int)Enum.Parse(typeof(TransactionType), str);
                }
            }

            STInt8.Serialize(so, (byte)tagByte);

            if (typeBits >= 16)
            {
                STInt8.Serialize(so, (byte)typeBits);
            }

            if (fieldBits >= 16)
            {
                STInt8.Serialize(so, (byte)fieldBits);
            }

            ISerializedType serializedType = null;

            if (fieldName == "Memo" && value is MemoDataInfo)
            {
                serializedType = STMemo;
            }
            else if (fieldName == "Arg" && value is ParameterInfo)
            {
                serializedType = STArg;
            }
            else
            {
                serializedType = _typesMap[typeBits];
            }

            try
            {
                serializedType.Serialize(so, value);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException($"Field with name '{fieldName}' cannot be serialized.", ex);
            }
        }
Пример #6
0
            public override JObject ToJObject(StObject obj)
            {
                var json = new JObject();

                foreach (Field f in obj)
                {
                    try
                    {
                        ISerializedType obj1       = obj[f];
                        Object          someObject = obj1.ToJson();

                        if (someObject is JToken)
                        {
                            if (FieldSymbolics.IsSymbolicField(f) && ((JToken)someObject).Type == JTokenType.Integer)
                            {
                                someObject = FieldSymbolics.AsString(f, ((JToken)someObject).ToObject <int>());
                            }

                            json.Add(Field.GetName(f), (JToken)someObject);
                        }
                        else if (FieldSymbolics.IsSymbolicField(f) && someObject is int)
                        {
                            someObject = FieldSymbolics.AsString(f, (int)someObject);
                            json.Add(Field.GetName(f), someObject.ToString());
                        }
                        else if (someObject is int)
                        {
                            json.Add(Field.GetName(f), (int)someObject);
                        }
                        else
                        {
                            json.Add(Field.GetName(f), someObject.ToString());
                        }
                    }
                    catch (JsonException e)
                    {
                        throw new ApplicationException("Json serialization failed.", e);
                    }
                }

                return(json);
            }
Пример #7
0
 public void Add(Field field, ISerializedType value)
 {
     AddFieldHeader(field);
     if (field.IsVlEncoded)
     {
         AddLengthEncoded(value);
     }
     else
     {
         value.ToBytes(_sink);
         if (field.Type == FieldType.StObject)
         {
             AddFieldHeader(Field.ObjectEndMarker);
         }
         else if (field.Type == FieldType.StArray)
         {
             AddFieldHeader(Field.ArrayEndMarker);
         }
     }
 }
Пример #8
0
 public void Add(Field f, ISerializedType value)
 {
     fields.Add(f, value);
 }
Пример #9
0
 public void Write(ISerializedType obj)
 {
     obj.ToBytesSink(_list);
 }
Пример #10
0
 public void Add(Field field, ISerializedType value)
 {
     AddFieldHeader(field);
     if (field.IsVlEncoded)
     {
         AddLengthEncoded(value);
     }
     else
     {
         value.ToBytes(_sink);
         if (field.Type == FieldType.StObject)
         {
             AddFieldHeader(Field.ObjectEndMarker);
         }
         else if (field.Type == FieldType.StArray)
         {
             AddFieldHeader(Field.ArrayEndMarker);
         }
     }
 }
Пример #11
0
 public void AddLengthEncoded(ISerializedType value)
 {
     var bytes = new BytesList();
     value.ToBytes(bytes);
     AddLengthEncoded(bytes);
 }
 public Type ClassForType(ISerializedType obj)
 {
     return(_serializer.ClassForType(obj));
 }
 public SimpleSerializedObject(T data, ISerializedType serializedType)
 {
     Data        = data;
     ContentType = typeof(T);
     Type        = serializedType;
 }