Ejemplo n.º 1
0
        public static StObject FromParser(BinaryParser parser, int?hint = null)
        {
            var so = new StObject();

            // hint, is how many bytes to parse
            if (hint != null)
            {
                // end hint
                hint = parser.Pos() + hint;
            }

            while (!parser.End(hint))
            {
                var field = parser.ReadField();
                if (field == Field.ObjectEndMarker)
                {
                    break;
                }
                var sizeHint = field.IsVlEncoded ? parser.ReadVlLength() : (int?)null;
                var st       = field.FromParser(parser, sizeHint);
                if (st == null)
                {
                    throw new InvalidOperationException("Parsed " + field + " as null");
                }
                so.Fields[field] = st;
            }
            return(so);
        }
Ejemplo n.º 2
0
        public static StObject FromJson(JToken token, bool strict)
        {
            if (token.Type != JTokenType.Object)
            {
                throw new InvalidJsonException("{token} is not an object");
            }

            var so = new StObject();

            foreach (var pair in (JObject)token)
            {
                if (!Field.Values.Has(pair.Key))
                {
                    if (strict)
                    {
                        throw new InvalidJsonException($"unknown field {pair.Key}");
                    }
                    continue;
                }
                var             fieldForType = Field.Values[pair.Key];
                var             jsonForField = pair.Value;
                ISerializedType st;
                try
                {
                    st = fieldForType.FromJson(jsonForField);
                }
                catch (Exception e) when(e is InvalidOperationException ||
                                         e is FormatException ||
                                         e is OverflowException ||
                                         e is PrecisionException)
                {
                    throw new InvalidJsonException($"Can't decode `{fieldForType}` " +
                                                   $"from `{jsonForField}`", e);
                }
                so.Fields[fieldForType] = st;
            }
            return(so);
        }
Ejemplo n.º 3
0
 public StObject ReadStObject()
 {
     return(StObject.FromParser(_parser));
 }
Ejemplo n.º 4
0
 public StObject ReadVlStObject()
 {
     return(StObject.FromParser(_parser, _parser.ReadVlLength()));
 }