/// <inheritdoc/> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (graph == null) { throw Error.ArgumentNull("graph"); } if (graph.GetType().IsEnum) { messageWriter.WriteValue(graph.ToString()); } else { if (graph is DateTime) { messageWriter.WriteValue(ODataPrimitiveSerializer.ConvertUnsupportedDateTime((DateTime)graph, writeContext != null ? writeContext.TimeZoneInfo : null)); } else { messageWriter.WriteValue(ODataPrimitiveSerializer.ConvertUnsupportedPrimitives(graph)); } } }
public async Task WriteValue_APIsShouldYieldSameResult(object value, string expected) { IODataResponseMessage asyncResponseMessage = new InMemoryMessage { StatusCode = 200, Stream = this.asyncStream }; using (var messageWriter = new ODataMessageWriter(asyncResponseMessage, writerSettings)) { await messageWriter.WriteValueAsync(value); } this.asyncStream.Position = 0; var asyncResult = await new StreamReader(this.asyncStream).ReadToEndAsync(); var syncResult = await TaskUtils.GetTaskForSynchronousOperation(() => { IODataResponseMessage syncResponseMessage = new InMemoryMessage { StatusCode = 200, Stream = this.syncStream }; using (var messageWriter = new ODataMessageWriter(syncResponseMessage, writerSettings)) { messageWriter.WriteValue(value); } this.syncStream.Position = 0; return(new StreamReader(this.syncStream).ReadToEnd()); }); Assert.Equal(expected, asyncResult); Assert.Equal(expected, syncResult); }
/// <inheritdoc/> public override void WriteObject(object graph, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } messageWriter.WriteValue(ODataPrimitiveSerializer.ConvertUnsupportedPrimitives(graph)); }
public void WriteUndeclaredUIntValueShouldFail() { var settings = new ODataMessageWriterSettings(); var model = new EdmModel(); model.GetUInt32("MyNS", false); var writer = new ODataMessageWriter(new DummyRequestMessage(), settings, model); Action write = () => writer.WriteValue((UInt16)123); write.ShouldThrow <ODataException>().WithMessage("The value of type 'System.UInt16' could not be converted to a raw string."); }
public void WriteDeclaredUIntValueShouldWork() { var settings = new ODataMessageWriterSettings(); var model = new EdmModel(); model.GetUInt32("MyNS", false); var writer = new ODataMessageWriter(new DummyRequestMessage(), settings, model); Action write = () => writer.WriteValue((UInt32)123); write.ShouldNotThrow(); }
/// <inheritdoc/> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (graph == null) { throw Error.ArgumentNull("graph"); } if (TypeHelper.IsEnum(graph.GetType())) { messageWriter.WriteValue(graph.ToString()); } else { messageWriter.WriteValue(ODataPrimitiveSerializer.ConvertUnsupportedPrimitives(graph)); } }
/// <inheritdoc/> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (graph == null) { throw Error.ArgumentNull("graph"); } if (graph.GetType().GetTypeInfo().IsEnum) { messageWriter.WriteValue(graph.ToString()); } else { messageWriter.WriteValue(ODataPrimitiveSerializer.ConvertUnsupportedPrimitives(graph)); } }
/// <inheritdoc/> public override Task WriteObjectAsync(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } if (graph == null) { throw Error.ArgumentNull("graph"); } if (graph.GetType().GetTypeInfo().IsEnum) { messageWriter.WriteValue(graph.ToString()); } else { messageWriter.WriteValue(ODataPrimitiveSerializer.ConvertUnsupportedPrimitives(graph)); } return(Task.FromResult(false)); }
/// <inheritdoc/> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (graph == null) { throw new ArgumentNullException(nameof(graph)); } if (messageWriter == null) { throw new ArgumentNullException(nameof(messageWriter)); } // TODO: Call Async version? // TODO: Make the enum alias working if (TypeHelper.IsEnum(graph.GetType())) { messageWriter.WriteValue(graph.ToString()); } else { messageWriter.WriteValue(ODataPrimitiveSerializer.ConvertUnsupportedPrimitives(graph, writeContext?.TimeZone)); } }
protected override async Task <Stream> WriteStreamContentAsync(Stream stream, bool writeAsText) { var message = new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(true), _model)) { var value = writeAsText ? (object)Utils.StreamToString(stream) : Utils.StreamToByteArray(stream); #if SILVERLIGHT messageWriter.WriteValue(value); #else await messageWriter.WriteValueAsync(value); #endif return(await message.GetStreamAsync()); } }
private byte[] ClientWriteBatchRequest(BodyContentType bodyContentType) { MemoryStream stream = new MemoryStream(); IODataRequestMessage requestMessage = new InMemoryMessage { Stream = stream }; requestMessage.SetHeader(ODataConstants.ContentTypeHeader, batchContentTypeApplicationJson); using (ODataMessageWriter messageWriter = new ODataMessageWriter(requestMessage)) { ODataBatchWriter batchWriter = messageWriter.CreateODataBatchWriter(); batchWriter.WriteStartBatch(); // Write a change set with update operation. batchWriter.WriteStartChangeset(); // Create an update operation in the change set. ODataBatchOperationRequestMessage updateOperationMessage = batchWriter.CreateOperationRequestMessage( "PUT", new Uri(serviceDocumentUri + "MyBlob"), "1"); // Set the content type with explicit character set so that the content string // is flushed into the operation message body stream without byte-order-mark. updateOperationMessage.SetHeader("CoNtEnt-TYPE", GetContentType(bodyContentType)); // Use the message writer to write encoded string content. using (ODataMessageWriter operationMessageWriter = new ODataMessageWriter(updateOperationMessage)) { operationMessageWriter.WriteValue(GetEncodedContentObject(bodyContentType, /*forRequest*/ true)); } batchWriter.WriteEndChangeset(); // Write a query operation. ODataBatchOperationRequestMessage queryOperationMessage = batchWriter.CreateOperationRequestMessage( "GET", new Uri(serviceDocumentUri + "MyBlob"), /*contentId*/ null); // Header modification on inner payload. queryOperationMessage.SetHeader("AcCePt", GetContentType(bodyContentType)); batchWriter.WriteEndBatch(); stream.Position = 0; return(stream.ToArray()); } }
public void JsonPaddingEnabledWithRawValueSpecified() { var settings = new ODataMessageWriterSettings {JsonPCallback = "functionName", DisableMessageStreamDisposal = true}; settings.SetContentType(ODataFormat.RawValue); IODataResponseMessage message = new InMemoryMessage {StatusCode = 200, Stream = new MemoryStream()}; using (var writer = new ODataMessageWriter(message, settings)) { writer.WriteValue(123); } var responseStream = message.GetStream(); responseStream.Position = 0; var responseString = new StreamReader(responseStream).ReadToEnd(); responseString.Should().Be("functionName(123)"); message.GetHeader("Content-Type").Should().StartWith("text/javascript"); }
public void JsonPaddingEnabledWithRawValueSpecified() { var settings = new ODataMessageWriterSettings { JsonPCallback = "functionName", EnableMessageStreamDisposal = false }; settings.SetContentType(ODataFormat.RawValue); IODataResponseMessage message = new InMemoryMessage { StatusCode = 200, Stream = new MemoryStream() }; using (var writer = new ODataMessageWriter(message, settings)) { writer.WriteValue(123); } var responseStream = message.GetStream(); responseStream.Position = 0; var responseString = new StreamReader(responseStream).ReadToEnd(); responseString.Should().Be("functionName(123)"); message.GetHeader("Content-Type").Should().StartWith("text/javascript"); }
public void WriteDeclaredUIntValueShouldWork() { var settings = new ODataMessageWriterSettings(); var model = new EdmModel(); model.GetUInt32("MyNS", false); var writer = new ODataMessageWriter(new DummyRequestMessage(), settings, model); Action write = () => writer.WriteValue((UInt32)123); write.ShouldNotThrow(); }
private byte[] ServiceReadBatchRequestAndWriterBatchResponse(byte[] requestPayload, BodyContentType bodyContentType) { IODataRequestMessage requestMessage = new InMemoryMessage() { Stream = new MemoryStream(requestPayload) }; requestMessage.SetHeader(ODataConstants.ContentTypeHeader, batchContentTypeApplicationJson); using (ODataMessageReader messageReader = new ODataMessageReader(requestMessage, new ODataMessageReaderSettings(), null)) { MemoryStream responseStream = new MemoryStream(); IODataResponseMessage responseMessage = new InMemoryMessage { Stream = responseStream }; // Client is expected to receive the response message in the same format as that is used in the request sent. responseMessage.SetHeader(ODataConstants.ContentTypeHeader, batchContentTypeApplicationJson); ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage); ODataBatchWriter batchWriter = messageWriter.CreateODataBatchWriter(); batchWriter.WriteStartBatch(); ODataBatchReader batchReader = messageReader.CreateODataBatchReader(); while (batchReader.Read()) { switch (batchReader.State) { case ODataBatchReaderState.Operation: ODataBatchOperationRequestMessage operationMessage = batchReader.CreateOperationRequestMessage(); if (operationMessage.Method == "PUT") { using (Stream operationMessageBodyStream = operationMessage.GetStream()) { // Verify the bytes in the request operation stream. byte[] sampleBytes = bodyContentType == BodyContentType.Textual ? Encoding.UTF8.GetBytes("\"" + this.textualSampleStringA + "\"") : binarySampleBytesA; Assert.Equal(operationMessageBodyStream.Length, sampleBytes.Length); foreach (byte samplebyte in sampleBytes) { Assert.Equal(samplebyte, operationMessageBodyStream.ReadByte()); } } // Create the response. ODataBatchOperationResponseMessage operationResponse = batchWriter.CreateOperationResponseMessage(operationMessage.ContentId); operationResponse.StatusCode = 201; operationResponse.SetHeader("CoNtEnT-TyPe", "application/json;odata.metadata=none"); } else if (operationMessage.Method == "GET") { ODataBatchOperationResponseMessage operationResponse = batchWriter.CreateOperationResponseMessage(operationMessage.ContentId); operationResponse.StatusCode = 200; operationResponse.SetHeader("CoNtEnT-TyPe", GetContentType(bodyContentType)); ODataMessageWriterSettings settings = new ODataMessageWriterSettings(); settings.SetServiceDocumentUri(new Uri(serviceDocumentUri)); using (ODataMessageWriter operationMessageWriter = new ODataMessageWriter(operationResponse, settings, null)) { operationMessageWriter.WriteValue(GetEncodedContentObject(bodyContentType, false)); } } break; case ODataBatchReaderState.ChangesetStart: batchWriter.WriteStartChangeset(); break; case ODataBatchReaderState.ChangesetEnd: batchWriter.WriteEndChangeset(); break; } } batchWriter.WriteEndBatch(); responseStream.Position = 0; return(responseStream.ToArray()); } }
protected override async Task<Stream> WriteStreamContentAsync(Stream stream) { var message = new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(true), _model)) { #if SILVERLIGHT messageWriter.WriteValue(Utils.StreamToString(stream)); #else await messageWriter.WriteValueAsync(Utils.StreamToString(stream)); #endif return await message.GetStreamAsync(); } }
protected override async Task<Stream> WriteStreamContentAsync(Stream stream, bool writeAsText) { var message = new ODataRequestMessage(); using (var messageWriter = new ODataMessageWriter(message, GetWriterSettings(true), _model)) { var value = writeAsText ? (object)Utils.StreamToString(stream) : Utils.StreamToByteArray(stream); #if SILVERLIGHT messageWriter.WriteValue(value); #else await messageWriter.WriteValueAsync(value); #endif return await message.GetStreamAsync(); } }
public void WriteUndeclaredUIntValueShouldFail() { var settings = new ODataMessageWriterSettings(); var model = new EdmModel(); model.GetUInt32("MyNS", false); var writer = new ODataMessageWriter(new DummyRequestMessage(), settings, model); Action write = () => writer.WriteValue((UInt16)123); write.ShouldThrow<ODataException>().WithMessage("The value of type 'System.UInt16' could not be converted to a raw string."); }