/// <summary> /// Write a literal value in JSON Verbose format. /// </summary> /// <param name="model">EDM Model to use for validation and type lookups.</param> /// <param name="messageWriterSettings">Settings to use when writing.</param> /// <param name="textWriter">TextWriter to use as the output for the value.</param> /// <param name="writeValue">Delegate to use to actually write the value.</param> private static void WriteJsonVerboseLiteral(IEdmModel model, ODataMessageWriterSettings messageWriterSettings, TextWriter textWriter, Action <ODataVerboseJsonPropertyAndValueSerializer> writeValue) { // Calling dispose since it's the right thing to do, but when created from a custom-built TextWriter // the output context Dispose will not actually dispose anything, it will just cleanup itself. using (ODataVerboseJsonOutputContext jsonOutputContext = new ODataVerboseJsonOutputContext(ODataFormat.VerboseJson, textWriter, messageWriterSettings, model)) { ODataVerboseJsonPropertyAndValueSerializer jsonPropertyAndValueSerializer = new ODataVerboseJsonPropertyAndValueSerializer(jsonOutputContext); writeValue(jsonPropertyAndValueSerializer); jsonPropertyAndValueSerializer.AssertRecursionDepthIsZero(); } }
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 (ODataVerboseJsonOutputContext outputContext = new ODataVerboseJsonOutputContext( ODataFormat.VerboseJson, new NonDisposingStream(stream), Encoding.UTF8, new ODataMessageWriterSettings() { Version = version }, /*writingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataVerboseJsonPropertyAndValueSerializer serializer = new ODataVerboseJsonPropertyAndValueSerializer(outputContext); serializer.WritePrimitiveValue( clrValue, /*collectionValidator*/ null, typeReference); } stream.Position = 0; object actualValue; using (ODataVerboseJsonInputContext inputContext = new ODataVerboseJsonInputContext( ODataFormat.VerboseJson, stream, Encoding.UTF8, new ODataMessageReaderSettings(), version, /*readingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataVerboseJsonPropertyAndValueDeserializer deserializer = new ODataVerboseJsonPropertyAndValueDeserializer(inputContext); deserializer.JsonReader.Read(); actualValue = deserializer.ReadNonEntityValue( typeReference, /*duplicatePropertyNamesChecker*/ null, /*collectionValidator*/ null, /*validateNullValue*/ true, /*propertyName*/ null); } if (clrValue is byte[]) { ((byte[])actualValue).Should().Equal((byte[])clrValue, description); } else { actualValue.Should().Be(clrValue, description); } }
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 (ODataVerboseJsonOutputContext outputContext = new ODataVerboseJsonOutputContext( ODataFormat.VerboseJson, new NonDisposingStream(stream), Encoding.UTF8, new ODataMessageWriterSettings() { Version = version }, /*writingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataVerboseJsonPropertyAndValueSerializer serializer = new ODataVerboseJsonPropertyAndValueSerializer(outputContext); serializer.WritePrimitiveValue( clrValue, /*collectionValidator*/ null, typeReference); } stream.Position = 0; object actualValue; using (ODataVerboseJsonInputContext inputContext = new ODataVerboseJsonInputContext( ODataFormat.VerboseJson, stream, Encoding.UTF8, new ODataMessageReaderSettings(), version, /*readingResponse*/ true, /*synchronous*/ true, model, /*urlResolver*/ null)) { ODataVerboseJsonPropertyAndValueDeserializer deserializer = new ODataVerboseJsonPropertyAndValueDeserializer(inputContext); deserializer.JsonReader.Read(); actualValue = deserializer.ReadNonEntityValue( typeReference, /*duplicatePropertyNamesChecker*/ null, /*collectionValidator*/ null, /*validateNullValue*/ true, /*propertyName*/ null); } if (clrValue is byte[]) { ((byte[])actualValue).Should().Equal((byte[])clrValue, description); } else { actualValue.Should().Be(clrValue, description); } }