protected sealed override bool TryDeserialize( object serialized, out object value) { if (serialized is null) { value = null; return(true); } if (serialized is IList l) { var list = (IList)Activator.CreateInstance(ClrType); for (int i = 0; i < l.Count; i++) { if (InnerInputType.TryDeserialize(l[i], out var v)) { list.Add(v); } else { value = null; return(false); } } value = list; return(true); } value = null; return(false); }
protected sealed override object ParseLiteral(IValueNode literal) { if (literal is NullValueNode) { return(null); } if (literal.Kind != NodeKind.ListValue && InnerInputType.IsInstanceOfType(literal)) { return(CreateList(new ListValueNode(literal))); } if (literal.Kind == NodeKind.ListValue) { if (_isNestedList) { if (IsInstanceOfType(literal)) { return(CreateList((ListValueNode)literal)); } } else { return(CreateList((ListValueNode)literal)); } } // TODO : resources throw new ArgumentException( "The specified literal cannot be handled by this list type."); }
protected sealed override bool IsInstanceOfType(IValueNode literal) { if (literal is NullValueNode) { return(true); } if (InnerInputType.IsInstanceOfType(literal)) { return(true); } if (literal is ListValueNode listValueLiteral) { foreach (IValueNode element in listValueLiteral.Items) { if (!InnerInputType.IsInstanceOfType(element)) { return(false); } } return(true); } return(false); }
protected sealed override bool TrySerialize( object value, out object serialized) { if (value is null) { serialized = null; return(true); } if (value is IList l) { var list = new List <object>(); for (int i = 0; i < l.Count; i++) { list.Add(InnerInputType.Serialize(l[i])); } serialized = list; return(true); } serialized = null; return(false); }
protected sealed override bool IsInstanceOfType(object value) { if (value is null) { return(false); } return(InnerInputType.IsInstanceOfType(value)); }
protected sealed override bool IsInstanceOfType(IValueNode literal) { if (literal is NullValueNode) { return(false); } return(InnerInputType.IsInstanceOfType(literal)); }
protected sealed override bool TryDeserialize( object serialized, out object value) { if (serialized != null) { return(InnerInputType.TryDeserialize(serialized, out value)); } value = null; return(false); }
protected sealed override IValueNode ParseValue(object value) { if (value == null) { throw new ArgumentException( TypeResources.NonNullType_ValueIsNull, nameof(value)); } return(InnerInputType.ParseValue(value)); }
protected sealed override object ParseLiteral(IValueNode literal) { if (literal is NullValueNode) { throw new ArgumentException( TypeResources.NonNullType_ValueIsNull, nameof(literal)); } return(InnerInputType.ParseLiteral(literal)); }
protected sealed override bool TrySerialize( object value, out object serialized) { if (value != null) { serialized = InnerInputType.Serialize(value); return(true); } serialized = null; return(false); }
private object CreateList(ListValueNode listLiteral) { var list = (IList)Activator.CreateInstance(ClrType); for (var i = 0; i < listLiteral.Items.Count; i++) { object element = InnerInputType.ParseLiteral( listLiteral.Items[i]); list.Add(element); } return(list); }
protected sealed override bool IsInstanceOfType(IValueNode literal) { if (literal is NullValueNode) { return(true); } IInputType inputType = InnerInputType; if (_namedType.IsInstanceOfType(literal)) { return(true); } if (_isNestedList) { if (literal is ListValueNode listValueLiteral) { foreach (IValueNode element in listValueLiteral.Items) { if (element.Kind != NodeKind.ListValue || !InnerInputType.IsInstanceOfType(element)) { return(false); } } return(true); } } else { if (literal is ListValueNode listValueLiteral) { foreach (IValueNode element in listValueLiteral.Items) { if (!InnerInputType.IsInstanceOfType(element)) { return(false); } } return(true); } } return(false); }
protected sealed override IValueNode ParseValue(object value) { if (value == null) { return(NullValueNode.Default); } if (value is IList l) { var items = new List <IValueNode>(); for (int i = 0; i < l.Count; i++) { items.Add(InnerInputType.ParseValue(l[i])); } return(new ListValueNode(null, items)); } // TODO : resources throw new ScalarSerializationException( TypeResourceHelper.Scalar_Cannot_ParseValue( this.Visualize(), value.GetType())); }