/// <summary> /// Deserialize an object. /// </summary> /// <param name="type">The type of the object to deserialize.</param> /// <param name="fieldNamingStrategy">The field naming strategy that is being used for the scope of the request.</param> /// <param name="jsonValue">The JSON value that represents the object to deserialize.</param> protected override object DeserializeValue(Type type, IFieldNamingStrategy fieldNamingStrategy, JsonValue jsonValue) { var jsonObject = jsonValue as JsonObject; if (jsonObject == null) { throw new HypermediaAspNetCoreException("The top level JSON value must be an Object."); } var serializer = CreateJsonApiSerializer(fieldNamingStrategy); if (TypeHelper.IsEnumerable(type)) { var collection = TypeHelper.CreateListInstance(type); foreach (var item in serializer.DeserializeMany(jsonObject)) { collection.Add(item); } return(collection); } return(serializer.Deserialize(jsonObject)); }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The contractor resolver.</param> /// <param name="fieldNamingStratgey">The field naming strategy that is in use.</param> /// <param name="jsonValue">The root document node.</param> public JsonPatch(IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey, JsonValue jsonValue) { _fieldNamingStratgey = fieldNamingStratgey; _jsonValue = jsonValue; ContractResolver = contractResolver; }
/// <summary> /// Constructor. /// </summary> /// <param name="mediaTypeName">The media type name that the output is handling.</param> /// <param name="contractResolver">The contract resolver to use.</param> /// <param name="fieldNamingStrategy">The field naming strategy when serializing and deserializing the JSON.</param> protected JsonOutputFormatter(string mediaTypeName, IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStrategy) : base(contractResolver) { SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse(mediaTypeName)); SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); FieldNamingStrategy = fieldNamingStrategy; }
/// <summary> /// Read an object from the given JSON value. /// </summary> /// <param name="type">The type of the object to deserialize.</param> /// <param name="fieldNamingStrategy">The field naming strategy that is being used for the scope of the request.</param> /// <param name="jsonValue">The JSON value to read.</param> /// <returns>The object that was read.</returns> protected virtual object ReadFromJsonValue(Type type, IFieldNamingStrategy fieldNamingStrategy, JsonValue jsonValue) { if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IPatch <>)) { return(CreatePatch(type, ContractResolver, fieldNamingStrategy, jsonValue)); } return(DeserializeValue(type, fieldNamingStrategy, jsonValue)); }
/// <summary> /// Constructor. /// </summary> /// <param name="name">The friendly name of the format.</param> /// <param name="mediaTypeName">The correct media type name for content negotiation.</param> /// <param name="contractResolver">The resource contract resolver used to resolve the contracts at runtime.</param> /// <param name="fieldNamingStratgey">The field naming strategy to use.</param> /// <param name="outputFormatter">The output formatter to apply when writing the output.</param> protected JsonMediaTypeFormatter( string name, string mediaTypeName, IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey, IJsonOutputFormatter outputFormatter) : base(name, mediaTypeName, contractResolver) { FieldNamingStrategy = fieldNamingStratgey; OutputFormatter = outputFormatter; }
/// <summary> /// Serialize the value into an JSON AST. /// </summary> /// <param name="type">The type to serialize from.</param> /// <param name="value">The value to serialize.</param> /// <param name="fieldNamingStrategy">The field naming strategy when serializing and deserializing the JSON.</param> /// <returns>The JSON object that represents the serialized value.</returns> protected virtual JsonValue SerializeValue(Type type, object value, IFieldNamingStrategy fieldNamingStrategy) { var serializer = new JsonSerializer( new JsonConverterFactory( JsonConverterFactory.Default, new ContractConverter(ContractResolver, fieldNamingStrategy), new ComplexConverter(fieldNamingStrategy))); return(serializer.SerializeValue(value)); }
/// <summary> /// Deserialize an object. /// </summary> /// <param name="type">The type of the object to deserialize.</param> /// <param name="fieldNamingStrategy">The field naming strategy that is being used for the scope of the request.</param> /// <param name="jsonValue">The JSON value that represents the object to deserialize.</param> protected virtual object DeserializeValue(Type type, IFieldNamingStrategy fieldNamingStrategy, JsonValue jsonValue) { var serializer = new JsonSerializer( new JsonConverterFactory( JsonConverterFactory.DefaultConverters.Union( new ContractConverter(ContractResolver, fieldNamingStrategy), new ComplexConverter(fieldNamingStrategy) ))); return(serializer.DeserializeValue(type, jsonValue)); }
/// <summary> /// Serialize the value into an JSON AST. /// </summary> /// <param name="type">The type to serialize from.</param> /// <param name="value">The value to serialize.</param> /// <param name="fieldNamingStrategy">The field naming strategy when serializing and deserializing the JSON.</param> /// <returns>The JSON object that represents the serialized value.</returns> JsonValue SerializeContract(Type type, object value, IFieldNamingStrategy fieldNamingStrategy) { var serializer = CreateJsonApiSerializer(fieldNamingStrategy); if (TypeHelper.IsEnumerable(type)) { return(serializer.SerializeMany((IEnumerable)value)); } return(serializer.SerializeEntity(value)); }
/// <summary> /// Create an instance of a serializer with the specified field naming strategy as an override. /// </summary> /// <param name="fieldNamingStrategy">The field naming strategy to override with.</param> /// <returns>The serializer instance to use.</returns> JsonApiSerializer CreateJsonApiSerializer(IFieldNamingStrategy fieldNamingStrategy) { if (_serializerOptions.FieldNamingStrategy == fieldNamingStrategy) { return(new JsonApiSerializer(_serializerOptions)); } var serializerOptions = _serializerOptions.Clone(); serializerOptions.FieldNamingStrategy = fieldNamingStrategy; return(new JsonApiSerializer(serializerOptions)); }
/// <summary> /// Serialize the value into an JSON AST. /// </summary> /// <param name="type">The type to serialize from.</param> /// <param name="value">The value to serialize.</param> /// <param name="fieldNamingStrategy">The field naming strategy when serializing and deserializing the JSON.</param> /// <returns>The JSON object that represents the serialized value.</returns> protected override JsonValue SerializeValue(Type type, object value, IFieldNamingStrategy fieldNamingStrategy) { if (ContractResolver.CanResolve(TypeHelper.GetUnderlyingType(type))) { return(SerializeContract(type, value, fieldNamingStrategy)); } if (TypeHelper.GetUnderlyingType(type) == typeof(JsonApiError)) { return(SerializeJsonApiError(type, value)); } throw new HypermediaException("Not supported."); }
/// <summary> /// Constructor. /// </summary> /// <param name="fieldNamingStrategy">The field naming strategy.</param> public JsonSerializer(IFieldNamingStrategy fieldNamingStrategy) { _jsonConverterFactory = new JsonConverterFactory( JsonConverterFactory.Default, new ComplexConverter(fieldNamingStrategy)); }
/// <summary> /// Constructor. /// </summary> /// <param name="fieldNamingStrategy">The field naming strategy.</param> public ComplexConverter(IFieldNamingStrategy fieldNamingStrategy) { _fieldNamingStrategy = fieldNamingStrategy; }
/// <summary> /// Configures MVC to use the Hypermedia formatters. /// </summary> /// <param name="builder">The builder to configure the options on.</param> /// <param name="contractResolver">The contract resolver to use for the formatters.</param> /// <param name="fieldNamingStrategy">The field naming strategy to use by default.</param> /// <returns>The builder to continue building on.</returns> public static IMvcBuilder AddHypermediaFormatters(this IMvcBuilder builder, IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStrategy) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (contractResolver == null) { throw new ArgumentNullException(nameof(contractResolver)); } return(AddHypermediaFormatters(builder, options => { options.ContractResolver = contractResolver; options.FieldNamingStrategy = fieldNamingStrategy; })); }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The resource contract resolver used to resolve the contracts at runtime.</param> /// <param name="fieldNamingStratgey">The field naming strategy to use.</param> /// <param name="outputFormatter">The output formatter to apply when writing the output.</param> public JsonMediaTypeFormatter( IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey, IJsonOutputFormatter outputFormatter) : this(Name, MediaTypeName, contractResolver, fieldNamingStratgey, outputFormatter) { }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The resource contract resolver used to resolve the contracts at runtime.</param> /// <param name="fieldNamingStratgey">The field naming strategy to use.</param> public JsonMediaTypeFormatter(IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey) : this(Name, MediaTypeName, contractResolver, fieldNamingStratgey, DefaultJsonOutputFormatter.Instance) { }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The resource contract resolver used to resolve the contracts at runtime.</param> /// <param name="fieldNamingStratgey">The field naming strategy to use.</param> /// <param name="prettify">A value which indicates whether the output should be prettified.</param> JsonApiMediaTypeFormatter(IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey, bool prettify) : base(Name, MediaTypeName, contractResolver, prettify) { _fieldNamingStratgey = fieldNamingStratgey; }
/// <summary> /// Initializes a new instance of <see cref="NoSetterAccessor"/>. /// </summary> /// <param name="namingStrategy">The <see cref="IFieldNamingStrategy"/> to use.</param> public NoSetterAccessor(IFieldNamingStrategy namingStrategy) { this.namingStrategy = namingStrategy; }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The resource contract resolver used to resolve the contracts at runtime.</param> /// <param name="fieldNamingStratgey">The field naming strategy to use.</param> public JsonApiMediaTypeFormatter(IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey) : this(contractResolver, fieldNamingStratgey, false) { }
/// <summary> /// Creates an instance of the patch object for the media type. /// </summary> /// <param name="type">The type of the inner instance that is being patched.</param> /// <param name="contractResolver">The contract resolver.</param> /// <param name="fieldNamingStrategy">The field naming strategy that is being used for the scope of the request.</param> /// <param name="jsonValue">The JSON value that represents the patch values.</param> /// <returns>The instance of the patch.</returns> protected virtual IPatch CreatePatch(Type type, IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStrategy, JsonValue jsonValue) { var patch = typeof(JsonPatch <>).MakeGenericType(type.GenericTypeArguments[0]); var constructor = patch.GetConstructor(new[] { typeof(IContractResolver), typeof(IFieldNamingStrategy), typeof(JsonObject) }); Debug.Assert(constructor != null); return((IPatch)constructor.Invoke(new object[] { ContractResolver, fieldNamingStrategy, jsonValue })); }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The contract resolver.</param> /// <param name="fieldNamingStrategy">The field naming strategy.</param> public ContractConverter(IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStrategy) { _contractResolver = contractResolver; _fieldNamingStrategy = fieldNamingStrategy; }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The resource contract resolver used to resolve the contracts at runtime.</param> /// <param name="fieldNamingStratgey">The field naming strategy to use.</param> /// <param name="outputFormatter">The output formatter to apply when writing the output.</param> public JsonApiMetadataMediaTypeFormatter( IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey, IJsonOutputFormatter outputFormatter) : base(contractResolver, fieldNamingStratgey, outputFormatter) { }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The resource contract resolver used to resolve the contracts at runtime.</param> /// <param name="fieldNamingStratgey">The field naming strategy to use.</param> /// <param name="outputFormatter">The output formatter to apply when writing the output.</param> JsonApiMediaTypeFormatter( IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStratgey, IJsonOutputFormatter outputFormatter) : base(Name, MediaTypeName, contractResolver, fieldNamingStratgey, outputFormatter) { }
/// <summary> /// Constructor. /// </summary> /// <param name="contractResolver">The contract resolver to use.</param> /// <param name="fieldNamingStrategy">The field naming strategy when serializing and deserializing the JSON.</param> public JsonOutputFormatter(IContractResolver contractResolver, IFieldNamingStrategy fieldNamingStrategy) : this(JsonMediaTypeName, contractResolver, fieldNamingStrategy) { }
/// <summary> /// Initializes a new instance of <see cref="FieldAccessor"/>. /// </summary> /// <param name="namingStrategy">The <see cref="IFieldNamingStrategy"/> to use.</param> public FieldAccessor(IFieldNamingStrategy namingStrategy) { this.namingStrategy = namingStrategy; }
/// <summary> /// Constructor. /// </summary> /// <param name="jsonConverterFactory">The JSON converter factory.</param> /// <param name="fieldNamingStrategy">The field naming strategy.</param> public JsonSerializer(IJsonConverterFactory jsonConverterFactory, IFieldNamingStrategy fieldNamingStrategy) { JsonConverterFactory = jsonConverterFactory; FieldNamingStrategy = fieldNamingStrategy; }
/// <summary> /// Constructor. /// </summary> /// <param name="jsonConverterFactory">The JSON converter factory.</param> /// <param name="fieldNamingStrategy">The field naming strategy.</param> public Serializer(IJsonConverterFactory jsonConverterFactory, IFieldNamingStrategy fieldNamingStrategy) { JsonConverterFactory = jsonConverterFactory; FieldNamingStrategy = fieldNamingStrategy; }