Beispiel #1
0
        protected override void ReadTo(TextReader stream, SerializationInfo outInfo, ISerializationKeyTypeGetter keyTypeGetter)
        {
            if (!stream.SkipTo(SPACE_CHARS))
            {
                return;
            }
            if (!stream.MoveTo('{'))
            {
                return;
            }
            if (!stream.SkipTo(SPACE_CHARS))
            {
                return;
            }

            while (!stream.IsMatchPeek('}'))
            {
                // read key
                var key = ReadString(stream);
                Assert.IsTrue(stream.SkipTo(SPACE_CHARS));

                System.Type valueType;
                if (outInfo.ObjectType.Equals(DEFAULT_TYPE))
                {
                    valueType = DEFAULT_TYPE;
                }
                else
                {
                    valueType = (keyTypeGetter != null)
                        ? keyTypeGetter.Get(key)
                        : null;
                    if (valueType == null)
                    {
                        var f = outInfo.ObjectType.GetFieldInHierarchy(key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                        Assert.IsNotNull(f, $"Don't found '{key}' field...");
                        valueType = f.FieldType;
                    }
                }

                // move to next of ':'
                Assert.IsTrue(SkipNextColon(stream));
                Assert.IsTrue(stream.SkipTo(SPACE_CHARS));

                //Debug.Log($"debug-- key={key}; next={(char)stream.Peek()},type={outInfo.FullTypeName}");
                // read value
                var value = ReadValue(stream, valueType);
                //Debug.Log($"debug-- key={key}, value={value}; next={(char)stream.Peek()},type={outInfo.FullTypeName}");

                outInfo.AddValue(key, value);
                Assert.IsTrue(stream.SkipTo(SPACE_CHARS));

                if (SkipNextCamma(stream))
                {
                    Assert.IsTrue(stream.SkipTo(SPACE_CHARS));
                }
            }
            stream.Read(); // skip '}' if not end of string
        }
Beispiel #2
0
 protected abstract void ReadTo(TextReader stream, SerializationInfo outInfo, ISerializationKeyTypeGetter keyTypeGetter);
            public static TypeInfo Create(System.Type target, DesirializeInstancePredication desirializeInstance, SerializeInstancePredication serializeInstance, ISerializationKeyTypeGetter keyTypeGetter)
            {
                Assert.IsNotNull(target);
                Assert.IsNotNull(desirializeInstance);

                return(new TypeInfo()
                {
                    Target = target,
                    DesirializeInstance = desirializeInstance,
                    SerializeInstance = serializeInstance,
                    KeyTypeGetter = keyTypeGetter,
                });
            }
 public static TypeInfo Create <T>(DesirializeInstancePredication desirializeInstance, SerializeInstancePredication serializeInstance, ISerializationKeyTypeGetter keyTypeGetter)
 => Create(typeof(T), desirializeInstance, serializeInstance, keyTypeGetter);