Пример #1
0
        /// <inheritdoc/>
        public IJsonNode GetJsonNode(object value)
        {
            if (value == null)
            {
                return(DefaultJsonNode.Create(JValue.CreateNull(), UnderlyingSerializer));
            }

            return(DefaultJsonNode.Create(JToken.FromObject(value, UnderlyingSerializer), UnderlyingSerializer));
        }
Пример #2
0
        protected override JsonObjectContract CreateObjectContract(Type objectType)
        {
            var contract = base.CreateObjectContract(objectType);

            if (typeof(JsonModel).IsAssignableFrom(objectType))
            {
                contract.ExtensionDataGetter = instance =>
                {
                    if (instance is not JsonModel model || model.ExtensionData == null)
                    {
                        return(null);
                    }

                    return(model.ExtensionData.Select(x =>
                    {
                        var value = x.Value switch
                        {
                            null => null,
                            DefaultJsonNode node => node.Token as object,
                            _ => JToken.FromObject(x.Value, _serializer.UnderlyingSerializer)
                        };

                        return KeyValuePair.Create(x.Key as object, value);
                    }));
                };

                var skippedProperties = objectType.GetCustomAttributes <JsonSkippedPropertiesAttribute>().SelectMany(x => x.Properties).Distinct().ToArray();
                contract.ExtensionDataSetter = (instance, key, value) =>
                {
                    if (instance is not JsonModel model)
                    {
                        return;
                    }

                    if (Array.IndexOf(skippedProperties, key) != -1)
                    {
                        return;
                    }

                    var node = value switch
                    {
                        null => null,
                        JToken jToken => DefaultJsonNode.Create(jToken, _serializer.UnderlyingSerializer),
                        _ => DefaultJsonNode.Create(JToken.FromObject(value, _serializer.UnderlyingSerializer), _serializer.UnderlyingSerializer)
                    };

                    model.ExtensionData.Add(key, node);
                };
            }

            return(contract);
        }
Пример #3
0
            public bool MoveNext()
            {
                var index = _index;

                if (_index++ < _array.Count)
                {
                    _current = _array[index] as DefaultJsonNode;
                    return(true);
                }

                _current = null;
                return(false);
            }
Пример #4
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var token = JToken.ReadFrom(reader);

            return(DefaultJsonNode.Create(token, serializer));
        }
Пример #5
0
 public void Reset()
 {
     _index   = 0;
     _current = null;
 }