/// <inheritdoc/> public IJsonNode GetJsonNode(object value) { if (value == null) { return(DefaultJsonNode.Create(JValue.CreateNull(), UnderlyingSerializer)); } return(DefaultJsonNode.Create(JToken.FromObject(value, UnderlyingSerializer), UnderlyingSerializer)); }
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); }
public bool MoveNext() { var index = _index; if (_index++ < _array.Count) { _current = _array[index] as DefaultJsonNode; return(true); } _current = null; return(false); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var token = JToken.ReadFrom(reader); return(DefaultJsonNode.Create(token, serializer)); }
public void Reset() { _index = 0; _current = null; }