/// <summary> /// Constructor. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> internal ODataAtomSerializer(ODataAtomOutputContext atomOutputContext) : base(atomOutputContext) { Debug.Assert(atomOutputContext != null, "atomOutputContext != null"); this.atomOutputContext = atomOutputContext; }
/// <summary> /// Constructor. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> /// <param name="itemTypeReference">The item type of the collection being written or null if no metadata is available.</param> internal ODataAtomCollectionWriter(ODataAtomOutputContext atomOutputContext, IEdmTypeReference itemTypeReference) : base(atomOutputContext, itemTypeReference) { Debug.Assert(atomOutputContext != null, "atomOutputContext != null"); this.atomOutputContext = atomOutputContext; this.atomCollectionSerializer = new ODataAtomCollectionSerializer(atomOutputContext); }
/// <summary> /// Constructor. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> internal ODataAtomServiceDocumentSerializer(ODataAtomOutputContext atomOutputContext) : base(atomOutputContext) { this.atomServiceDocumentMetadataSerializer = new ODataAtomServiceDocumentMetadataSerializer(atomOutputContext); // DEVNOTE: grab this early so that any validation errors are thrown at creation time rather than when Write___ is called. this.contextUriBuilder = atomOutputContext.CreateContextUriBuilder(); }
/// <summary> /// Constructor creating an OData writer using the ATOM format. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> /// <param name="navigationSource">The navigation source we are going to write entities for.</param> /// <param name="entityType">The entity type for the entries in the feed to be written (or null if the entity set base type should be used).</param> /// <param name="writingFeed">True if the writer is created for writing a feed; false when it is created for writing an entry.</param> internal ODataAtomWriter( ODataAtomOutputContext atomOutputContext, IEdmNavigationSource navigationSource, IEdmEntityType entityType, bool writingFeed) : base(atomOutputContext, navigationSource, entityType, writingFeed) { Debug.Assert(atomOutputContext != null, "atomOutputContext != null"); this.atomOutputContext = atomOutputContext; this.atomEntryAndFeedSerializer = new ODataAtomEntryAndFeedSerializer(this.atomOutputContext); }
/// <summary> /// Constructor. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> internal ODataAtomPropertyAndValueSerializer(ODataAtomOutputContext atomOutputContext) : base(atomOutputContext) { }
/// <summary> /// Constructor. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> internal ODataAtomServiceDocumentMetadataSerializer(ODataAtomOutputContext atomOutputContext) : base(atomOutputContext) { }
private void VerifyPrimitiveValueRoundtrips(object clrValue, string edmTypeName, ODataVersion version, string description) { IEdmModel model = new EdmModel(); IEdmPrimitiveTypeReference typeReference = new EdmPrimitiveTypeReference((IEdmPrimitiveType)model.FindType(edmTypeName), true); MemoryStream stream = new MemoryStream(); using (ODataAtomOutputContext outputContext = new ODataAtomOutputContext( ODataFormat.Atom, new NonDisposingStream(stream), Encoding.UTF8, new ODataMessageWriterSettings() { Version = version }, /*writingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataAtomPropertyAndValueSerializer serializer = new ODataAtomPropertyAndValueSerializer(outputContext); serializer.XmlWriter.WriteStartElement("ValueElement"); serializer.WritePrimitiveValue( clrValue, /*collectionValidator*/ null, typeReference, /*serializationTypeNameAnnotation*/ null); serializer.XmlWriter.WriteEndElement(); } stream.Position = 0; object actualValue; using (ODataAtomInputContext inputContext = new ODataAtomInputContext( ODataFormat.Atom, stream, Encoding.UTF8, new ODataMessageReaderSettings(), /*readingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataAtomPropertyAndValueDeserializer deserializer = new ODataAtomPropertyAndValueDeserializer(inputContext); deserializer.XmlReader.MoveToContent(); actualValue = deserializer.ReadNonEntityValue( typeReference, /*duplicatePropertyNamesChecker*/ null, /*collectionValidator*/ null, /*validateNullValue*/ true); } if (clrValue is byte[]) { ((byte[])actualValue).Should().Equal((byte[])clrValue, description); } else { actualValue.Should().Be(clrValue, description); } }
/// <summary> /// Constructor. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> internal ODataAtomEntityReferenceLinkSerializer(ODataAtomOutputContext atomOutputContext) : base(atomOutputContext) { // DEVNOTE: grab this early so that any validation errors are thrown at creation time rather than when Write___ is called. this.contextUriBuilder = atomOutputContext.CreateContextUriBuilder(); }
private void VerifyTypeCollectionRoundtrip(ODataCollectionValue value, string propertyName, ODataFeedAndEntrySerializationInfo info) { var properties = new[] { new ODataProperty { Name = propertyName, Value = value } }; var entry = new ODataEntry() { TypeName = "NS.Student", Properties = properties, SerializationInfo = info}; MemoryStream stream = new MemoryStream(); using (ODataAtomOutputContext outputContext = new ODataAtomOutputContext( ODataFormat.Atom, new NonDisposingStream(stream), Encoding.UTF8, new ODataMessageWriterSettings() { Version = ODataVersion.V4 }, /*writingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { outputContext.MessageWriterSettings.SetServiceDocumentUri(ServiceDocumentUri); var atomWriter = new ODataAtomWriter(outputContext, /*entitySet*/ null, /*entityType*/ null, /*writingFeed*/ false); atomWriter.WriteStart(entry); atomWriter.WriteEnd(); } stream.Position = 0; object actualValue = null; using (ODataAtomInputContext inputContext = new ODataAtomInputContext( ODataFormat.Atom, stream, Encoding.UTF8, new ODataMessageReaderSettings(), /*readingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { var atomReader = new ODataAtomReader(inputContext, /*entitySet*/ null, /*entityType*/ null, /*writingFeed*/ false); while (atomReader.Read()) { if (atomReader.State == ODataReaderState.EntryEnd) { ODataEntry entryOut = atomReader.Item as ODataEntry; actualValue = entryOut.Properties.Single(p => p.Name == propertyName).ODataValue; } } } TestUtils.AssertODataValueAreEqual(actualValue as ODataValue, value); }
private void VerifyComplexTypeRoundtrip(ODataComplexValue value, string typeName) { var typeReference = new EdmComplexTypeReference((IEdmComplexType)model.FindType(typeName), true); MemoryStream stream = new MemoryStream(); using (ODataAtomOutputContext outputContext = new ODataAtomOutputContext( ODataFormat.Atom, new NonDisposingStream(stream), Encoding.UTF8, new ODataMessageWriterSettings() { Version = ODataVersion.V4 }, /*writingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataAtomPropertyAndValueSerializer serializer = new ODataAtomPropertyAndValueSerializer(outputContext); serializer.XmlWriter.WriteStartElement("ValueElement"); serializer.WriteComplexValue( value, typeReference, /*isOpenPropertyType*/ false, /*isWritingCollection*/ false, /*beforeValueAction*/ null, /*afterValueAction*/ null, new DuplicatePropertyNamesChecker(false, false), /*collectionValidator*/ null, /*projectedProperties*/ null); serializer.XmlWriter.WriteEndElement(); } stream.Position = 0; object actualValue; using (ODataAtomInputContext inputContext = new ODataAtomInputContext( ODataFormat.Atom, stream, Encoding.UTF8, new ODataMessageReaderSettings(), /*readingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataAtomPropertyAndValueDeserializer deserializer = new ODataAtomPropertyAndValueDeserializer(inputContext); deserializer.XmlReader.MoveToContent(); actualValue = deserializer.ReadNonEntityValue( typeReference, /*duplicatePropertyNamesChecker*/ null, /*collectionValidator*/ null, /*validateNullValue*/ true); } TestUtils.AssertODataValueAreEqual(actualValue as ODataValue, value); }
private static ODataAtomServiceDocumentSerializer CreateAtomOutputContext(MemoryStream memoryStream, IODataUrlResolver resolver = null) { var model = new EdmModel(); var odataMessageWriterSettings = new ODataMessageWriterSettings(); var atomOutputContext = new ODataAtomOutputContext(ODataFormat.Atom, memoryStream, Encoding.UTF8, odataMessageWriterSettings, false /*writingResponse*/, true /*sync*/, model, resolver); return new ODataAtomServiceDocumentSerializer(atomOutputContext); }
/// <summary> /// Constructor. /// </summary> /// <param name="atomOutputContext">The output context to write to.</param> internal ODataAtomFeedMetadataSerializer(ODataAtomOutputContext atomOutputContext) : base(atomOutputContext) { }