private static ODataMediaTypeFormatter CreateApplicationJson(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { ODataMediaTypeFormatter formatter = CreateFormatterWithoutMediaTypes( serializerProvider, deserializerProvider, ODataPayloadKind.Feed, ODataPayloadKind.Entry, ODataPayloadKind.Property, ODataPayloadKind.EntityReferenceLink, ODataPayloadKind.EntityReferenceLinks, ODataPayloadKind.Collection, ODataPayloadKind.ServiceDocument, ODataPayloadKind.Error, ODataPayloadKind.Parameter); // Add minimal metadata as the first media type so it gets used when the request doesn't // ask for a specific content type formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadataStreamingTrue); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadataStreamingFalse); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataMinimalMetadata); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataFullMetadataStreamingTrue); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataFullMetadataStreamingFalse); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataFullMetadata); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataNoMetadataStreamingTrue); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataNoMetadataStreamingFalse); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataNoMetadata); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonODataVerbose); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonStreamingTrue); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJsonStreamingFalse); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationJson); return formatter; }
/// <summary> /// Initializes a new instance of the <see cref="ODataMediaTypeFormatter"/> class. /// </summary> /// <param name="deserializerProvider">The <see cref="ODataDeserializerProvider"/> to use.</param> /// <param name="serializerProvider">The <see cref="ODataSerializerProvider"/> to use.</param> /// <param name="payloadKinds">The kind of payloads this formatter supports.</param> public ODataMediaTypeFormatter(ODataDeserializerProvider deserializerProvider, ODataSerializerProvider serializerProvider, IEnumerable<ODataPayloadKind> payloadKinds) { if (deserializerProvider == null) { throw Error.ArgumentNull("deserializerProvider"); } if (serializerProvider == null) { throw Error.ArgumentNull("serializerProvider"); } if (payloadKinds == null) { throw Error.ArgumentNull("payloadKinds"); } _deserializerProvider = deserializerProvider; _serializerProvider = serializerProvider; _payloadKinds = payloadKinds; // Maxing out the received message size as we depend on the hosting layer to enforce this limit. MessageWriterSettings = new ODataMessageWriterSettings { Indent = true, DisableMessageStreamDisposal = true, MessageQuotas = new ODataMessageQuotas { MaxReceivedMessageSize = Int64.MaxValue } }; MessageReaderSettings = new ODataMessageReaderSettings { DisableMessageStreamDisposal = true, MessageQuotas = new ODataMessageQuotas { MaxReceivedMessageSize = Int64.MaxValue }, }; _version = DefaultODataVersion; }
private static ODataMediaTypeFormatter CreateRawValue(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { ODataMediaTypeFormatter formatter = CreateFormatterWithoutMediaTypes(serializerProvider, deserializerProvider, ODataPayloadKind.Value); formatter.MediaTypeMappings.Add(new ODataPrimitiveValueMediaTypeMapping()); formatter.MediaTypeMappings.Add(new ODataBinaryValueMediaTypeMapping()); return formatter; }
private static ODataMediaTypeFormatter CreateApplicationAtomXmlTypeFeed(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { ODataMediaTypeFormatter formatter = CreateFormatterWithoutMediaTypes(serializerProvider, deserializerProvider, ODataPayloadKind.Feed); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationAtomXmlTypeFeed); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationAtomXml); return formatter; }
public ODataCollectionSerializer(IEdmCollectionTypeReference edmCollectionType, ODataSerializerProvider serializerProvider) : base(edmCollectionType, ODataPayloadKind.Collection, serializerProvider) { Contract.Assert(edmCollectionType != null); _edmCollectionType = edmCollectionType; IEdmTypeReference itemType = edmCollectionType.ElementType(); Contract.Assert(itemType != null); _edmItemType = itemType; }
public ODataFeedSerializer(IEdmCollectionTypeReference edmCollectionType, ODataSerializerProvider serializerProvider) : base(edmCollectionType, ODataPayloadKind.Feed, serializerProvider) { _edmCollectionType = edmCollectionType; if (!edmCollectionType.ElementType().IsEntity()) { throw Error.NotSupported(SRResources.TypeMustBeEntityCollection, edmCollectionType.ElementType().FullName(), typeof(IEdmEntityType).Name); } }
private static ODataMediaTypeFormatter CreateApplicationAtomSvcXml(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { ODataMediaTypeFormatter formatter = CreateFormatterWithoutMediaTypes(serializerProvider, deserializerProvider, ODataPayloadKind.ServiceDocument); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationAtomSvcXml); formatter.AddDollarFormatQueryStringMappings(); return formatter; }
protected ODataEntrySerializer(IEdmTypeReference edmType, ODataPayloadKind odataPayloadKind, ODataSerializerProvider serializerProvider) : this(edmType, odataPayloadKind) { if (serializerProvider == null) { throw Error.ArgumentNull("serializerProvider"); } SerializerProvider = serializerProvider; }
/// <summary> /// Initializes a new instance of the <see cref="ODataEdmTypeSerializer"/> class. /// </summary> /// <param name="payloadKind">The kind of OData payload that this serializer generates.</param> /// <param name="serializerProvider">The <see cref="ODataSerializerProvider"/> to use to write inner objects.</param> protected ODataEdmTypeSerializer(ODataPayloadKind payloadKind, ODataSerializerProvider serializerProvider) : this(payloadKind) { if (serializerProvider == null) { throw Error.ArgumentNull("serializerProvider"); } SerializerProvider = serializerProvider; }
private static ODataMediaTypeFormatter CreateApplicationAtomXmlTypeEntry(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { ODataMediaTypeFormatter formatter = CreateFormatterWithoutMediaTypes(serializerProvider, deserializerProvider, ODataPayloadKind.Entry); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationAtomXmlTypeEntry); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationAtomXml); formatter.AddDollarFormatQueryStringMappings(); formatter.AddQueryStringMapping(DollarFormat, AtomFormat, ODataMediaTypes.ApplicationAtomXml); return formatter; }
/// <summary> /// Initializes a new instance of the <see cref="ODataCollectionSerializer"/> class. /// </summary> /// <param name="edmType">The edm collection type this serializer instance can serialize.</param> /// <param name="serializerProvider">The serializer provider to use to serialize nested objects.</param> public ODataCollectionSerializer(IEdmCollectionTypeReference edmType, ODataSerializerProvider serializerProvider) : base(edmType, ODataPayloadKind.Collection, serializerProvider) { IEdmTypeReference itemType = edmType.ElementType(); if (itemType == null) { throw Error.Argument("edmType", SRResources.ItemTypeOfCollectionNull, edmType.FullName()); } CollectionType = edmType; ElementType = itemType; }
internal ODataMediaTypeFormatter(ODataDeserializerProvider oDataDeserializerProvider, ODataSerializerProvider oDataSerializerProvider) { ODataDeserializerProvider = oDataDeserializerProvider; Model = oDataDeserializerProvider.EdmModel; ODataSerializerProvider = oDataSerializerProvider; SupportedMediaTypes.Add(ODataFormatterConstants.ApplicationAtomXmlMediaType); SupportedMediaTypes.Add(ODataFormatterConstants.ApplicationJsonMediaType); SupportedMediaTypes.Add(ODataFormatterConstants.ApplicationXmlMediaType); SupportedEncodings.Add(new UnicodeEncoding(bigEndian: false, byteOrderMark: true, throwOnInvalidBytes: true)); SupportedEncodings.Add(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true)); }
/// <summary> /// Creates a list of media type formatters to handle OData. /// </summary> /// <param name="serializerProvider">The serializer provider to use.</param> /// <param name="deserializerProvider">The deserializer provider to use.</param> /// <returns>A list of media type formatters to handle OData.</returns> public static IList<ODataMediaTypeFormatter> Create(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { return new List<ODataMediaTypeFormatter>() { // Create atomsvc+xml formatter first to handle service document requests without an Accept header in an XML format CreateApplicationAtomSvcXml(serializerProvider, deserializerProvider), // Create JSON formatter next so it gets used when the request doesn't ask for a specific content type CreateApplicationJson(serializerProvider, deserializerProvider), CreateApplicationAtomXmlTypeFeed(serializerProvider, deserializerProvider), CreateApplicationAtomXmlTypeEntry(serializerProvider, deserializerProvider), CreateApplicationXml(serializerProvider, deserializerProvider), CreateTextXml(serializerProvider, deserializerProvider) }; }
public ODataFeedSerializer(IEdmCollectionTypeReference edmCollectionType, ODataSerializerProvider serializerProvider) : base(edmCollectionType, ODataPayloadKind.Feed, serializerProvider) { Contract.Assert(edmCollectionType != null); _edmCollectionType = edmCollectionType; if (!edmCollectionType.ElementType().IsEntity()) { throw Error.NotSupported(SRResources.TypeMustBeEntityCollection, edmCollectionType.ElementType().FullName(), typeof(IEdmEntityType).Name); } Contract.Assert(edmCollectionType.ElementType() != null); Contract.Assert(edmCollectionType.ElementType().AsEntity() != null); Contract.Assert(edmCollectionType.ElementType().AsEntity().Definition != null); Contract.Assert(edmCollectionType.ElementType().AsEntity().Definition as IEdmEntityType != null); _edmElementType = _edmCollectionType.ElementType().AsEntity().Definition as IEdmEntityType; }
private ODataMediaTypeFormatter(ODataDeserializerProvider deserializerProvider, ODataSerializerProvider serializerProvider, IEnumerable<ODataPayloadKind> payloadKinds, ODataVersion version, HttpRequestMessage request) { Contract.Assert(deserializerProvider != null); Contract.Assert(deserializerProvider.EdmModel != null); Contract.Assert(serializerProvider != null); Contract.Assert(payloadKinds != null); _deserializerProvider = deserializerProvider; _model = deserializerProvider.EdmModel; _serializerProvider = serializerProvider; _payloadKinds = payloadKinds; _version = version; _request = request; }
internal ODataMediaTypeFormatter(ODataDeserializerProvider deserializerProvider, ODataSerializerProvider serializerProvider, IEnumerable<ODataPayloadKind> payloadKinds, ODataVersion version, HttpRequestMessage request) { Contract.Assert(deserializerProvider != null); Contract.Assert(serializerProvider != null); Contract.Assert(payloadKinds != null); _deserializerProvider = deserializerProvider; _serializerProvider = serializerProvider; _payloadKinds = payloadKinds; _version = version; _request = request; // Maxing out the received message size as we depend on the hosting layer to enforce this limit. MessageReaderQuotas = new ODataMessageQuotas { MaxReceivedMessageSize = Int64.MaxValue }; MessageWriterQuotas = new ODataMessageQuotas { MaxReceivedMessageSize = Int64.MaxValue }; }
public ODataEntityTypeSerializerTests() { _model = SerializationTestsHelpers.SimpleCustomerOrderModel(); _model.SetAnnotationValue<ClrTypeAnnotation>(_model.FindType("Default.Customer"), new ClrTypeAnnotation(typeof(Customer))); _model.SetAnnotationValue<ClrTypeAnnotation>(_model.FindType("Default.Order"), new ClrTypeAnnotation(typeof(Order))); _customerSet = _model.FindDeclaredEntityContainer("Default.Container").FindEntitySet("Customers"); _customer = new Customer() { FirstName = "Foo", LastName = "Bar", ID = 10, }; _serializerProvider = new DefaultODataSerializerProvider(); _customerType = _model.GetEdmTypeReference(typeof(Customer)).AsEntity(); _serializer = new ODataEntityTypeSerializer(_serializerProvider); _writeContext = new ODataSerializerContext() { EntitySet = _customerSet, Model = _model }; _entityInstanceContext = new EntityInstanceContext(_writeContext, _customerSet.ElementType.AsReference(), _customer); }
/// <summary> /// Initializes a new instance of the <see cref="ODataComplexTypeSerializer"/> class. /// </summary> /// <param name="serializerProvider">The serializer provider to use to serialize nested objects.</param> public ODataComplexTypeSerializer(ODataSerializerProvider serializerProvider) : base(ODataPayloadKind.Property, serializerProvider) { }
public ODataComplexTypeSerializer(IEdmComplexTypeReference edmComplexType, ODataSerializerProvider serializerProvider) : base(edmComplexType, ODataPayloadKind.Property, serializerProvider) { _edmComplexType = edmComplexType; }
public ODataCollectionSerializer(IEdmCollectionTypeReference edmCollectionType, ODataSerializerProvider serializerProvider) : base(edmCollectionType, ODataPayloadKind.Collection, serializerProvider) { _edmCollectionType = edmCollectionType; }
private static ODataMediaTypeFormatter CreateTextXml(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { ODataMediaTypeFormatter formatter = CreateFormatterWithoutMediaTypes( serializerProvider, deserializerProvider, ODataPayloadKind.Property, ODataPayloadKind.EntityReferenceLink, ODataPayloadKind.EntityReferenceLinks, ODataPayloadKind.Collection); formatter.SupportedMediaTypes.Add(ODataMediaTypes.TextXml); return formatter; }
private static ODataMediaTypeFormatter CreateApplicationXml(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider) { ODataMediaTypeFormatter formatter = CreateFormatterWithoutMediaTypes( serializerProvider, deserializerProvider, ODataPayloadKind.Property, ODataPayloadKind.EntityReferenceLink, ODataPayloadKind.EntityReferenceLinks, ODataPayloadKind.Collection, ODataPayloadKind.ServiceDocument, ODataPayloadKind.MetadataDocument, ODataPayloadKind.Error); formatter.SupportedMediaTypes.Add(ODataMediaTypes.ApplicationXml); return formatter; }
/// <inheritdoc /> public ODataEntityTypeSerializer(IEdmEntityTypeReference edmType, ODataSerializerProvider serializerProvider) : base(edmType, ODataPayloadKind.Entry, serializerProvider) { Contract.Assert(edmType != null); EntityType = edmType; }
private ODataMediaTypeFormatter(ODataMediaTypeFormatter formatter, ODataVersion version, HttpRequestMessage request) { Contract.Assert(formatter._serializerProvider != null); Contract.Assert(formatter._model != null); Contract.Assert(formatter._deserializerProvider != null); Contract.Assert(formatter._payloadKinds != null); Contract.Assert(request != null); // Parameter 1: formatter // Execept for the other two parameters, this constructor is a copy constructor, and we need to copy // everything on the other instance. // Parameter 1A: Copy this class's private fields and internal properties. _serializerProvider = formatter._serializerProvider; _model = formatter._model; _deserializerProvider = formatter._deserializerProvider; _payloadKinds = formatter._payloadKinds; WriteOnly = formatter.WriteOnly; // Parameter 1B: Copy the base class's properties. foreach (MediaTypeMapping mediaTypeMapping in formatter.MediaTypeMappings) { // MediaTypeMapping doesn't support clone, and its public surface area is immutable anyway. MediaTypeMappings.Add(mediaTypeMapping); } RequiredMemberSelector = formatter.RequiredMemberSelector; foreach (Encoding supportedEncoding in formatter.SupportedEncodings) { // Encoding's public surface area is mutable, so clone (and use separate instances) to prevent changes // to one instance from affecting the other. SupportedEncodings.Add((Encoding)supportedEncoding.Clone()); } foreach (MediaTypeHeaderValue supportedMediaType in formatter.SupportedMediaTypes) { // MediaTypeHeaderValue's public surface area is mutable, so clone (and use separate instances) to // prevent changes to one instance from affecting the other. SupportedMediaTypes.Add((MediaTypeHeaderValue)((ICloneable)supportedMediaType).Clone()); } // Parameter 2: version _version = version; // Parameter 3: request _request = request; }
public AnnotatingEntitySerializer(ODataSerializerProvider serializerProvider) : base(serializerProvider) { }
public CustomFeedSerializer(ODataSerializerProvider serializerProvider) : base(serializerProvider) { }
internal ODataMediaTypeFormatter(ODataDeserializerProvider deserializerProvider, ODataSerializerProvider serializerProvider, IEnumerable<ODataPayloadKind> payloadKinds) : this(deserializerProvider, serializerProvider, payloadKinds, DefaultODataVersion, request: null) { }
/// <inheritdoc /> public ODataEntityTypeSerializer(ODataSerializerProvider serializerProvider) : base(ODataPayloadKind.Entry, serializerProvider) { }
private ODataMediaTypeFormatter(ODataMediaTypeFormatter formatter, ODataVersion version, HttpRequestMessage request) { Contract.Assert(formatter._serializerProvider != null); Contract.Assert(formatter._deserializerProvider != null); Contract.Assert(formatter._payloadKinds != null); Contract.Assert(request != null); // Parameter 1: formatter // Execept for the other two parameters, this constructor is a copy constructor, and we need to copy // everything on the other instance. // Parameter 1A: Copy this class's private fields and internal properties. _serializerProvider = formatter._serializerProvider; _deserializerProvider = formatter._deserializerProvider; _payloadKinds = formatter._payloadKinds; MessageReaderQuotas = formatter.MessageReaderQuotas; MessageWriterQuotas = formatter.MessageWriterQuotas; // Parameter 1B: Copy the base class's properties. foreach (MediaTypeMapping mediaTypeMapping in formatter.MediaTypeMappings) { // MediaTypeMapping doesn't support clone, and its public surface area is immutable anyway. MediaTypeMappings.Add(mediaTypeMapping); } RequiredMemberSelector = formatter.RequiredMemberSelector; foreach (Encoding supportedEncoding in formatter.SupportedEncodings) { // Per-request formatters share the encoding instances with the parent formatter SupportedEncodings.Add(supportedEncoding); } foreach (MediaTypeHeaderValue supportedMediaType in formatter.SupportedMediaTypes) { // Per-request formatters share the media type instances with the parent formatter SupportedMediaTypes.Add(supportedMediaType); } // Parameter 2: version _version = version; // Parameter 3: request _request = request; }
public ODataCollectionSerializer(IEdmCollectionTypeReference edmCollectionType, ODataSerializerProvider serializerProvider) : base(edmCollectionType, ODataPayloadKind.Collection, serializerProvider) { _edmCollectionType = edmCollectionType; }
private static ODataMediaTypeFormatter CreateFormatterWithoutMediaTypes(ODataSerializerProvider serializerProvider, ODataDeserializerProvider deserializerProvider, params ODataPayloadKind[] payloadKinds) { ODataMediaTypeFormatter formatter = new ODataMediaTypeFormatter(deserializerProvider, serializerProvider, payloadKinds); AddSupportedEncodings(formatter); return formatter; }
private ODataSerializer GetSerializer(Type type, object value, IEdmModel model, ODataSerializerProvider serializerProvider) { ODataSerializer serializer; IEdmObject edmObject = value as IEdmObject; if (edmObject != null) { IEdmTypeReference edmType = edmObject.GetEdmType(); if (edmType == null) { throw new SerializationException( Error.Format(SRResources.EdmTypeCannotBeNull, type.FullName, typeof(IEdmObject).Name)); } serializer = serializerProvider.GetEdmTypeSerializer(edmType); if (serializer == null) { string message = Error.Format(SRResources.TypeCannotBeSerialized, edmType.ToTraceString(), typeof(ODataMediaTypeFormatter).Name); throw new SerializationException(message); } } else { // get the most appropriate serializer given that we support inheritance. type = value == null ? type : value.GetType(); serializer = serializerProvider.GetODataPayloadSerializer(model, type, Request); if (serializer == null) { string message = Error.Format(SRResources.TypeCannotBeSerialized, type.Name, typeof(ODataMediaTypeFormatter).Name); throw new SerializationException(message); } } return serializer; }
/// <summary> /// Initializes a new instance of the <see cref="ODataEdmTypeSerializer"/> class. /// </summary> /// <param name="edmType">The EDM type.</param> /// <param name="payloadKind">The kind of OData payload that this serializer generates.</param> /// <param name="serializerProvider">The <see cref="ODataSerializerProvider"/> to use to write inner objects.</param> protected ODataEdmTypeSerializer(IEdmTypeReference edmType, ODataPayloadKind payloadKind, ODataSerializerProvider serializerProvider) : this(edmType, payloadKind) { if (serializerProvider == null) { throw Error.ArgumentNull("serializerProvider"); } SerializerProvider = serializerProvider; }
public ODataComplexTypeSerializer(IEdmComplexTypeReference edmComplexType, ODataSerializerProvider serializerProvider) : base(edmComplexType, ODataPayloadKind.Property, serializerProvider) { _edmComplexType = edmComplexType; }
/// <inheritdoc /> public ODataEntityTypeSerializer(IEdmEntityTypeReference edmType, ODataSerializerProvider serializerProvider) : base(edmType, ODataPayloadKind.Entry, serializerProvider) { Contract.Assert(edmType != null); EntityType = edmType; }
/// <summary> /// Initializes a new instance of the <see cref="ODataMediaTypeFormatter"/> class. /// </summary> /// <param name="formatter">The <see cref="ODataMediaTypeFormatter"/> to copy settings from.</param> /// <param name="version">The OData version that this formatter supports.</param> /// <param name="request">The <see cref="HttpRequestMessage"/> for the per-request formatter instance.</param> /// <remarks>This is a copy constructor to be used in <see cref="GetPerRequestFormatterInstance"/>.</remarks> internal ODataMediaTypeFormatter(ODataMediaTypeFormatter formatter, ODataVersion version, HttpRequestMessage request) : base(formatter) { if (request == null) { throw Error.ArgumentNull("request"); } Contract.Assert(formatter._serializerProvider != null); Contract.Assert(formatter._deserializerProvider != null); Contract.Assert(formatter._payloadKinds != null); // Parameter 1: formatter // Execept for the other two parameters, this constructor is a copy constructor, and we need to copy // everything on the other instance. // Copy this class's private fields and internal properties. _serializerProvider = formatter._serializerProvider; _deserializerProvider = formatter._deserializerProvider; _payloadKinds = formatter._payloadKinds; MessageWriterSettings = formatter.MessageWriterSettings; MessageReaderSettings = formatter.MessageReaderSettings; // Parameter 2: version _version = version; // Parameter 3: request Request = request; }