private static void VerifyBinaryEncoding(byte[] byteArray, string encodedByteArr) { // Writing binary literal var builder = new StringBuilder(); var writer = new JsonWriter(new StringWriter(builder), false /*indent*/, ODataFormat.Json, isIeee754Compatible: true); writer.WritePrimitiveValue(byteArray); // Json literals is surrounded with quotes, so we need to add quotes to the encoded string. Assert.Equal("\"" + encodedByteArr + "\"", builder.ToString()); string defaultFormattedByteArray = DefaultLiteralFormatter.Format(byteArray); string keyAsSegmentFormattedByteArray = KeyAsSegmentsLiteralFormatter.Format(byteArray); // Non key segment is surrounded with binary prefix and escaped. Assert.Equal("binary\'" + Uri.EscapeDataString(encodedByteArr) + "\'", defaultFormattedByteArray); // Key Segments are the same as the escaped encoded string. Assert.Equal(Uri.EscapeDataString(encodedByteArr), keyAsSegmentFormattedByteArray); // Parsing binary literal var jsonReader = new JsonReader(new StringReader(builder.ToString()), ODataFormat.Json, isIeee754Compatible:true); jsonReader.Read(); Assert.Equal(encodedByteArr, jsonReader.Value); object defaultParsedByteArray; DefaultLiteralParser.TryParseLiteral(byteArray.GetType(),Uri.UnescapeDataString(defaultFormattedByteArray), out defaultParsedByteArray).Should().BeTrue(); Assert.Equal((byte[])defaultParsedByteArray, byteArray); object keyAsSegmentParsedByteArray; KeyAsSegmentsLiteralParser.TryParseLiteral(byteArray.GetType(), Uri.UnescapeDataString(keyAsSegmentFormattedByteArray), out keyAsSegmentParsedByteArray).Should().BeTrue(); Assert.Equal((byte[])keyAsSegmentParsedByteArray, byteArray); }
/// <summary> /// Serialize a set of spatial instances using the specified JsonWriter. /// </summary> /// <param name="writer">The Json writer.</param> /// <param name="instances">The spatial instances to write.</param> /// <returns>UTF8-Encoded serialization result.</returns> private static string SerializeSpatialInstances(Action<object, IJsonWriter> writer, IEnumerable<object> instances) { var stream = new MemoryStream(); var textWriter = new StreamWriter(stream, Encoding.UTF8); var jsonWriter = new JsonWriter(textWriter, false, ODataFormat.Json, false); var textReader = new StreamReader(stream, Encoding.UTF8); foreach (var instance in instances) { writer(instance, jsonWriter); } jsonWriter.Flush(); stream.Seek(0, SeekOrigin.Begin); return textReader.ReadToEnd(); }