diff --git a/sdk/core/Azure.Core/api/Azure.Core.net461.cs b/sdk/core/Azure.Core/api/Azure.Core.net461.cs index c055b81deb74..d5f115282491 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.net461.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.net461.cs @@ -17,6 +17,8 @@ protected AsyncPageable(System.Threading.CancellationToken cancellationToken) { } public static partial class AzureCoreExtensions { + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelJsonSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelXmlSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json, Azure.Core.Serialization.JsonPropertyNames propertyNameFormat, string dateTimeFormat = "o") { throw null; } public static System.Threading.Tasks.ValueTask ToObjectAsync(this System.BinaryData data, Azure.Core.Serialization.ObjectSerializer serializer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } @@ -718,17 +720,6 @@ internal RetryOptions() { } public Azure.Core.RetryMode Mode { get { throw null; } set { } } public System.TimeSpan NetworkTimeout { get { throw null; } set { } } } - public sealed partial class SequenceWriter : System.Buffers.IBufferWriter, System.IDisposable - { - public SequenceWriter(int segmentSize = 4096) { } - public void Advance(int bytesWritten) { } - public void CopyTo(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { } - public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { throw null; } - public void Dispose() { } - public System.Memory GetMemory(int sizeHint = 0) { throw null; } - public System.Span GetSpan(int sizeHint = 0) { throw null; } - public bool TryComputeLength(out long length) { throw null; } - } public partial class StatusCodeClassifier : Azure.Core.ResponseClassifier { public StatusCodeClassifier(System.ReadOnlySpan successStatusCodes) { } diff --git a/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs b/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs index 9fc2f7731266..f437461422c3 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs @@ -17,6 +17,8 @@ protected AsyncPageable(System.Threading.CancellationToken cancellationToken) { } public static partial class AzureCoreExtensions { + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelJsonSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelXmlSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json, Azure.Core.Serialization.JsonPropertyNames propertyNameFormat, string dateTimeFormat = "o") { throw null; } public static System.Threading.Tasks.ValueTask ToObjectAsync(this System.BinaryData data, Azure.Core.Serialization.ObjectSerializer serializer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } @@ -718,17 +720,6 @@ internal RetryOptions() { } public Azure.Core.RetryMode Mode { get { throw null; } set { } } public System.TimeSpan NetworkTimeout { get { throw null; } set { } } } - public sealed partial class SequenceWriter : System.Buffers.IBufferWriter, System.IDisposable - { - public SequenceWriter(int segmentSize = 4096) { } - public void Advance(int bytesWritten) { } - public void CopyTo(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { } - public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { throw null; } - public void Dispose() { } - public System.Memory GetMemory(int sizeHint = 0) { throw null; } - public System.Span GetSpan(int sizeHint = 0) { throw null; } - public bool TryComputeLength(out long length) { throw null; } - } public partial class StatusCodeClassifier : Azure.Core.ResponseClassifier { public StatusCodeClassifier(System.ReadOnlySpan successStatusCodes) { } diff --git a/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs b/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs index 9fc2f7731266..f437461422c3 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs @@ -17,6 +17,8 @@ protected AsyncPageable(System.Threading.CancellationToken cancellationToken) { } public static partial class AzureCoreExtensions { + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelJsonSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelXmlSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json, Azure.Core.Serialization.JsonPropertyNames propertyNameFormat, string dateTimeFormat = "o") { throw null; } public static System.Threading.Tasks.ValueTask ToObjectAsync(this System.BinaryData data, Azure.Core.Serialization.ObjectSerializer serializer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } @@ -718,17 +720,6 @@ internal RetryOptions() { } public Azure.Core.RetryMode Mode { get { throw null; } set { } } public System.TimeSpan NetworkTimeout { get { throw null; } set { } } } - public sealed partial class SequenceWriter : System.Buffers.IBufferWriter, System.IDisposable - { - public SequenceWriter(int segmentSize = 4096) { } - public void Advance(int bytesWritten) { } - public void CopyTo(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { } - public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { throw null; } - public void Dispose() { } - public System.Memory GetMemory(int sizeHint = 0) { throw null; } - public System.Span GetSpan(int sizeHint = 0) { throw null; } - public bool TryComputeLength(out long length) { throw null; } - } public partial class StatusCodeClassifier : Azure.Core.ResponseClassifier { public StatusCodeClassifier(System.ReadOnlySpan successStatusCodes) { } diff --git a/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs b/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs index c055b81deb74..d5f115282491 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs @@ -17,6 +17,8 @@ protected AsyncPageable(System.Threading.CancellationToken cancellationToken) { } public static partial class AzureCoreExtensions { + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelJsonSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelXmlSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json, Azure.Core.Serialization.JsonPropertyNames propertyNameFormat, string dateTimeFormat = "o") { throw null; } public static System.Threading.Tasks.ValueTask ToObjectAsync(this System.BinaryData data, Azure.Core.Serialization.ObjectSerializer serializer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } @@ -718,17 +720,6 @@ internal RetryOptions() { } public Azure.Core.RetryMode Mode { get { throw null; } set { } } public System.TimeSpan NetworkTimeout { get { throw null; } set { } } } - public sealed partial class SequenceWriter : System.Buffers.IBufferWriter, System.IDisposable - { - public SequenceWriter(int segmentSize = 4096) { } - public void Advance(int bytesWritten) { } - public void CopyTo(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { } - public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { throw null; } - public void Dispose() { } - public System.Memory GetMemory(int sizeHint = 0) { throw null; } - public System.Span GetSpan(int sizeHint = 0) { throw null; } - public bool TryComputeLength(out long length) { throw null; } - } public partial class StatusCodeClassifier : Azure.Core.ResponseClassifier { public StatusCodeClassifier(System.ReadOnlySpan successStatusCodes) { } diff --git a/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs b/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs index c055b81deb74..d5f115282491 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs @@ -17,6 +17,8 @@ protected AsyncPageable(System.Threading.CancellationToken cancellationToken) { } public static partial class AzureCoreExtensions { + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelJsonSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } + public static System.BinaryData ToBinaryData(this Azure.Core.Serialization.IModelXmlSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json) { throw null; } public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json, Azure.Core.Serialization.JsonPropertyNames propertyNameFormat, string dateTimeFormat = "o") { throw null; } public static System.Threading.Tasks.ValueTask ToObjectAsync(this System.BinaryData data, Azure.Core.Serialization.ObjectSerializer serializer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } @@ -718,17 +720,6 @@ internal RetryOptions() { } public Azure.Core.RetryMode Mode { get { throw null; } set { } } public System.TimeSpan NetworkTimeout { get { throw null; } set { } } } - public sealed partial class SequenceWriter : System.Buffers.IBufferWriter, System.IDisposable - { - public SequenceWriter(int segmentSize = 4096) { } - public void Advance(int bytesWritten) { } - public void CopyTo(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { } - public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellation) { throw null; } - public void Dispose() { } - public System.Memory GetMemory(int sizeHint = 0) { throw null; } - public System.Span GetSpan(int sizeHint = 0) { throw null; } - public bool TryComputeLength(out long length) { throw null; } - } public partial class StatusCodeClassifier : Azure.Core.ResponseClassifier { public StatusCodeClassifier(System.ReadOnlySpan successStatusCodes) { } diff --git a/sdk/core/Azure.Core/perf/SerializationBenchmark/BimodalRepro.cs b/sdk/core/Azure.Core/perf/SerializationBenchmark/BimodalRepro.cs index a9c99f7b8bd3..3a56b1933bdb 100644 --- a/sdk/core/Azure.Core/perf/SerializationBenchmark/BimodalRepro.cs +++ b/sdk/core/Azure.Core/perf/SerializationBenchmark/BimodalRepro.cs @@ -8,7 +8,9 @@ namespace Azure.Core.Perf public class BimodalRepro { [Benchmark] - public SequenceWriter Bimodal() + public void Bimodal() => ConstructWriter(); + + private SequenceWriter ConstructWriter() { return new SequenceWriter(); } diff --git a/sdk/core/Azure.Core/src/SequenceWriter.cs b/sdk/core/Azure.Core/src/SequenceWriter.cs index a376f3196a56..201565454d40 100644 --- a/sdk/core/Azure.Core/src/SequenceWriter.cs +++ b/sdk/core/Azure.Core/src/SequenceWriter.cs @@ -12,7 +12,7 @@ namespace Azure.Core /// /// A buffer writer which writes large sequences of data into smaller shared buffers. /// - public sealed class SequenceWriter : IBufferWriter, IDisposable + internal sealed class SequenceWriter : IBufferWriter, IDisposable { private struct Buffer { diff --git a/sdk/core/Azure.Core/src/Serialization/AzureCoreExtensions.cs b/sdk/core/Azure.Core/src/Serialization/AzureCoreExtensions.cs index 0e6224ad7176..c69c37a6710a 100644 --- a/sdk/core/Azure.Core/src/Serialization/AzureCoreExtensions.cs +++ b/sdk/core/Azure.Core/src/Serialization/AzureCoreExtensions.cs @@ -3,9 +3,12 @@ using System; using System.Collections.Generic; +using System.IO; using System.Text.Json; using System.Threading; using System.Threading.Tasks; +using System.Xml; +using Azure.Core; using Azure.Core.Json; using Azure.Core.Serialization; @@ -99,6 +102,41 @@ internal static dynamic ToDynamicFromJson(this BinaryData utf8Json, DynamicDataO return new DynamicData(mdoc.RootElement, options); } + /// + /// Converts an into a . + /// + /// The model to convert. + /// The to use. + /// A binary representation of the serialized model. + public static BinaryData ToBinaryData(this IModelJsonSerializable model, ModelSerializerOptions? options = default) + { + options ??= ModelSerializerOptions.DefaultServiceOptions; + using var writer = new SequenceWriter(); + using var jsonWriter = new Utf8JsonWriter(writer); + model.Serialize(jsonWriter, options); + jsonWriter.Flush(); + writer.TryComputeLength(out var length); + using var stream = new MemoryStream((int)length); + writer.CopyTo(stream, default); + return new BinaryData(stream.GetBuffer().AsMemory(0, (int)stream.Position)); + } + + /// + /// Converts an into a . + /// + /// The model to convert. + /// The to use. + /// A binary representation of the serialized model. + public static BinaryData ToBinaryData(this IModelXmlSerializable model, ModelSerializerOptions? options = default) + { + options ??= ModelSerializerOptions.DefaultServiceOptions; + using MemoryStream stream = new MemoryStream(); + using XmlWriter writer = XmlWriter.Create(stream); + model.Serialize(writer, options); + writer.Flush(); + return new BinaryData(stream.GetBuffer().AsMemory(0, (int)stream.Position)); + } + private static object? GetObject(in this JsonElement element) { switch (element.ValueKind) diff --git a/sdk/core/Azure.Core/src/Shared/ModelSerializerHelper.cs b/sdk/core/Azure.Core/src/Shared/ModelSerializerHelper.cs deleted file mode 100644 index 6ab4bb6e8110..000000000000 --- a/sdk/core/Azure.Core/src/Shared/ModelSerializerHelper.cs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.IO; -using System.Text.Json; -using System.Xml; - -namespace Azure.Core -{ - internal static class ModelSerializerHelper - { - public static BinaryData SerializeToBinaryData(Action serialize) - { - using var writer = new SequenceWriter(); - using var jsonWriter = new Utf8JsonWriter(writer); - serialize(jsonWriter); - jsonWriter.Flush(); - writer.TryComputeLength(out var length); - using var stream = new MemoryStream((int)length); - writer.CopyTo(stream, default); - return new BinaryData(stream.GetBuffer().AsMemory(0, (int)stream.Position)); - } - - public static BinaryData SerializeToBinaryData(Action serialize) - { - using MemoryStream stream = new MemoryStream(); - using XmlWriter writer = XmlWriter.Create(stream); - serialize(writer); - writer.Flush(); - return new BinaryData(stream.GetBuffer().AsMemory(0, (int)stream.Position)); - } - } -} diff --git a/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj b/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj index c890b1ddc8f9..670ff8857b03 100644 --- a/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj +++ b/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj @@ -23,7 +23,6 @@ - diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/CombinedInterfaceTests.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/CombinedInterfaceTests.cs deleted file mode 100644 index c54ac420a297..000000000000 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/CombinedInterfaceTests.cs +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.IO; -using System.Text; -using NUnit.Framework; -using Azure.Core.Tests.Public.ModelSerializationTests.Models; -using Azure.Core.Serialization; -using System.Collections.Generic; -using System; - -namespace Azure.Core.Tests.Public.ModelSerializationTests -{ - internal class CombinedInterfaceTests - { - private const string _xmlServiceResponse = - "" + - "Color" + - "Red" + - "ReadOnly" + - ""; - - private const string _jsonServiceResponse = "{\"key\":\"Color\",\"value\":\"Red\",\"readOnlyProperty\":\"ReadOnly\"}"; - - [Test] - public void RoundTripXmlModelWithWire() => CanRoundTripFutureVersionWithoutLossXml(ModelSerializerFormat.Wire, _xmlServiceResponse); - - [Test] - public void RoundTripXmlModelWithJson() => CanRoundTripFutureVersionWithoutLossXml(ModelSerializerFormat.Json, _jsonServiceResponse); - - private void CanRoundTripFutureVersionWithoutLossXml(ModelSerializerFormat format, string serviceResponse) - { - ModelSerializerOptions options = new ModelSerializerOptions(format); - - var expectedSerializedString = GetExpectedResult(format); - - XmlModelForCombinedInterface model = ModelSerializer.Deserialize(new BinaryData(Encoding.UTF8.GetBytes(serviceResponse)), options); - - Assert.AreEqual("Color", model.Key); - Assert.AreEqual("Red", model.Value); - Assert.AreEqual("ReadOnly", model.ReadOnlyProperty); - var data = ModelSerializer.Serialize(model, options); - string roundTrip = data.ToString(); - - Assert.That(roundTrip, Is.EqualTo(expectedSerializedString)); - - XmlModelForCombinedInterface model2 = ModelSerializer.Deserialize(new BinaryData(Encoding.UTF8.GetBytes(roundTrip)), options); - VerifyModelXmlModelForCombinedInterface(model, model2, format); - } - - [TestCase("J")] - [TestCase("W")] - public void CanRoundTripFutureVersionWithoutLossJson(string format) - { - ModelSerializerOptions options = new ModelSerializerOptions(format); - - string serviceResponse = "{\"key\":\"Color\",\"value\":\"Red\",\"readOnlyProperty\":\"ReadOnly\",\"x\":\"extra\"}"; - - var expectedSerializedString = "{\"key\":\"Color\",\"value\":\"Red\""; - if (format == ModelSerializerFormat.Json) - { - expectedSerializedString += ",\"readOnlyProperty\":\"ReadOnly\""; - expectedSerializedString += ",\"x\":\"extra\""; - } - expectedSerializedString += "}"; - - JsonModelForCombinedInterface model = ModelSerializer.Deserialize(new BinaryData(Encoding.UTF8.GetBytes(serviceResponse)), options); - - Assert.AreEqual("Color", model.Key); - Assert.AreEqual("Red", model.Value); - Assert.AreEqual("ReadOnly", model.ReadOnlyProperty); - var additionalProperties = typeof(JsonModelForCombinedInterface).GetProperty("RawData", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(model) as Dictionary; - Assert.IsNotNull(additionalProperties); - Assert.AreEqual(format == ModelSerializerFormat.Json, additionalProperties.ContainsKey("x")); - var data = ModelSerializer.Serialize(model, options); - string roundTrip = data.ToString(); - - Assert.That(roundTrip, Is.EqualTo(expectedSerializedString)); - - JsonModelForCombinedInterface model2 = ModelSerializer.Deserialize(new BinaryData(Encoding.UTF8.GetBytes(roundTrip)), options); - VerifyModelJsonModelForCombinedInterface(model, model2, format); - } - - internal static void VerifyModelXmlModelForCombinedInterface(XmlModelForCombinedInterface expected, XmlModelForCombinedInterface actual, ModelSerializerFormat format) - { - Assert.AreEqual(expected.Key, actual.Key); - Assert.AreEqual(expected.Value, actual.Value); - if (format.Equals(ModelSerializerFormat.Json)) - Assert.AreEqual(expected.ReadOnlyProperty, actual.ReadOnlyProperty); - } - - internal static void VerifyModelJsonModelForCombinedInterface(JsonModelForCombinedInterface expected, JsonModelForCombinedInterface actual, ModelSerializerFormat format) - { - Assert.AreEqual(expected.Key, actual.Key); - Assert.AreEqual(expected.Value, actual.Value); - if (format.Equals(ModelSerializerFormat.Json)) - Assert.AreEqual(expected.ReadOnlyProperty, actual.ReadOnlyProperty); - var rawDataProperty = typeof(JsonModelForCombinedInterface).GetProperty("RawData", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); - var expectedRawData = rawDataProperty.GetValue(expected) as Dictionary; - var actualRawData = rawDataProperty.GetValue(actual) as Dictionary; - Assert.AreEqual(expectedRawData.Count, actualRawData.Count); - if (format.Equals(ModelSerializerFormat.Json)) - Assert.AreEqual(expectedRawData["x"].ToString(), actualRawData["x"].ToString()); - } - - private string GetExpectedResult(ModelSerializerFormat format) - { - if (format == ModelSerializerFormat.Wire) - { - var expectedSerializedString = "\uFEFFColorRed"; - if (format.Equals(ModelSerializerFormat.Json)) - expectedSerializedString += "ReadOnly"; - expectedSerializedString += ""; - return expectedSerializedString; - } - if (format == ModelSerializerFormat.Json) - { - var expectedSerializedString = "{\"key\":\"Color\",\"value\":\"Red\""; - if (format.Equals(ModelSerializerFormat.Json)) - expectedSerializedString += ",\"readOnlyProperty\":\"ReadOnly\""; - expectedSerializedString += "}"; - return expectedSerializedString; - } - throw new InvalidOperationException($"Unknown format used in test {format}"); - } - } -} diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs index e494a76de917..9fb707905c5e 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs @@ -145,10 +145,7 @@ Envelope IModelJsonSerializable>.Deserialize(ref Utf8JsonReader r return DeserializeEnvelope(doc.RootElement, options); } - BinaryData IModelSerializable>.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable>.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); #endregion } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs index d06aad1a281b..7e4d3e8e68fd 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs @@ -138,10 +138,7 @@ Animal IModelJsonSerializable.Deserialize(ref Utf8JsonReader reader, Mod return DeserializeAnimal(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); #endregion } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs index 645e86ba0588..b4842c62aebc 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs @@ -126,8 +126,7 @@ CatReadOnlyProperty IModelJsonSerializable.Deserialize(ref return DeserializeCatReadOnlyProperty(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => - ModelSerializerHelper.SerializeToBinaryData(writer => Serialize(writer, options)); + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); #endregion } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs index 02a3059dcef9..e43c1ad90091 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs @@ -119,11 +119,11 @@ BinaryData IModelSerializable.Serialize(ModelSerializerOptions op { if (options.Format == ModelSerializerFormat.Json) { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); + return ((IModelJsonSerializable)this).ToBinaryData(options); } if (options.Format == ModelSerializerFormat.Wire) { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options, null); }); + return ((IModelXmlSerializable)this).ToBinaryData(options); } throw new InvalidOperationException($"Unsupported format '{options.Format}' request for '{GetType().Name}'"); } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs index bfac2a27bcaa..d56e53e91872 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs @@ -94,9 +94,6 @@ BaseModel IModelJsonSerializable.Deserialize(ref Utf8JsonReader reade return DeserializeBaseModel(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs index f3aa7a95dc9b..96d60f7ef041 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs @@ -132,6 +132,6 @@ ModelX IModelJsonSerializable.Deserialize(ref Utf8JsonReader reader, Mod return DeserializeModelX(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => ModelSerializerHelper.SerializeToBinaryData(writer => Serialize(writer, options)); + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs index 17f262d91df3..8ba494bfed56 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs @@ -117,6 +117,6 @@ ModelY IModelJsonSerializable.Deserialize(ref Utf8JsonReader reader, Mod return DeserializeModelY(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => ModelSerializerHelper.SerializeToBinaryData(writer => Serialize(writer, options)); + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs index 2ca937493b04..e0a138a2dc16 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs @@ -102,6 +102,6 @@ UnknownBaseModel IModelJsonSerializable.Deserialize(ref Utf8Js return DeserializeUnknownBaseModel(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => ModelSerializerHelper.SerializeToBinaryData(writer => Serialize(writer, options)); + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs index 3343817407ab..1854399ec7de 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs @@ -178,6 +178,6 @@ DogListProperty IModelJsonSerializable.Deserialize(ref Utf8Json return DeserializeDogListProperty(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => ModelSerializerHelper.SerializeToBinaryData(writer => Serialize(writer, options)); + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs index 9ed397e5bd89..a452a9e07177 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs @@ -123,9 +123,6 @@ JsonModelForCombinedInterface IModelJsonSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs index 62f28eb4de46..c70ab171958f 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs @@ -132,11 +132,11 @@ BinaryData IModelSerializable.Serialize(ModelSerializerOptions options { if (options.Format == ModelSerializerFormat.Json) { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); + return ((IModelJsonSerializable)this).ToBinaryData(options); } if (options.Format == ModelSerializerFormat.Wire) { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options, null); }); + return ((IModelXmlSerializable)this).ToBinaryData(options); } throw new InvalidOperationException($"Unsupported format '{options.Format}' request for '{GetType().Name}'"); } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs index 3ac0e9c7f273..fac5d69d3f21 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs @@ -2,19 +2,17 @@ // Licensed under the MIT License. using System; -using System.Xml.Linq; +using System.Collections.Generic; +using System.Text.Json; using System.Xml; -using Azure.Core.Serialization; -using NUnit.Framework; +using System.Xml.Linq; using System.Xml.Serialization; -using System.IO; -using System.Text.Json; -using System.Collections.Generic; +using Azure.Core.Serialization; namespace Azure.Core.Tests.Public.ModelSerializationTests.Models { [XmlRoot("Tag")] - internal class XmlModelForCombinedInterface : IXmlSerializable, IModelXmlSerializable + internal class XmlModelForCombinedInterface : IXmlSerializable, IModelXmlSerializable, IModelJsonSerializable { public XmlModelForCombinedInterface() { } @@ -42,6 +40,16 @@ public XmlModelForCombinedInterface(string key, string value, string readOnlyPro [XmlElement("ReadOnlyProperty")] public string ReadOnlyProperty { get; } + public static implicit operator RequestContent(XmlModelForCombinedInterface xmlModelForCombinedInterface) + { + return RequestContent.Create(xmlModelForCombinedInterface, ModelSerializerOptions.DefaultServiceOptions); + } + + public static explicit operator XmlModelForCombinedInterface(Response response) + { + return DeserializeXmlModelForCombinedInterface(XElement.Load(response.ContentStream), ModelSerializerOptions.DefaultServiceOptions); + } + void IXmlSerializable.Write(XmlWriter writer, string nameHint) => Serialize(writer, ModelSerializerOptions.DefaultServiceOptions, nameHint); @@ -112,11 +120,11 @@ BinaryData IModelSerializable.Serialize(ModelSeria { if (options.Format == ModelSerializerFormat.Json) { - return ModelSerializerHelper.SerializeToBinaryData(writer => Serialize(writer, options)); + return ((IModelJsonSerializable)this).ToBinaryData(options); } if (options.Format == ModelSerializerFormat.Wire) { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options, null); }); + return ((IModelXmlSerializable)this).ToBinaryData(options); } throw new InvalidOperationException($"Unsupported format '{options.Format}' request for '{GetType().Name}'"); } @@ -166,5 +174,22 @@ XmlModelForCombinedInterface IModelSerializable.De } XmlModelForCombinedInterface IModelXmlSerializable.Deserialize(XElement root, ModelSerializerOptions options) => DeserializeXmlModelForCombinedInterface(root, options); + + void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) + { + if (options.Format != ModelSerializerFormat.Json) + throw new InvalidOperationException($"Must use '{ModelSerializerFormat.Json}' format when calling the {nameof(IModelJsonSerializable)} interface"); + + Serialize(writer, options); + } + + XmlModelForCombinedInterface IModelJsonSerializable.Deserialize(ref Utf8JsonReader reader, ModelSerializerOptions options) + { + if (options.Format != ModelSerializerFormat.Json) + throw new InvalidOperationException($"Must use '{ModelSerializerFormat.Json}' format when calling the {nameof(IModelJsonSerializable)} interface"); + + using var doc = JsonDocument.ParseValue(ref reader); + return DeserializeXmlModelForCombinedInterface(doc.RootElement, options); + } } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs index a46fb65da567..25c7e2777671 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs @@ -134,7 +134,7 @@ public class JsonInterfaceStrategy : RoundTripStrategy where T : class, IM public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); + return ((IModelJsonSerializable)model).ToBinaryData(options); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -150,7 +150,7 @@ public class JsonInterfaceNonGenericStrategy : RoundTripStrategy where T : public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); + return ((IModelJsonSerializable)model).ToBinaryData(options); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -166,7 +166,7 @@ public class JsonInterfaceUtf8ReaderStrategy : RoundTripStrategy where T : public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); + return ((IModelJsonSerializable)model).ToBinaryData(options); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -183,7 +183,7 @@ public class JsonInterfaceSequenceWriterStrategy : RoundTripStrategy where public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); + return ((IModelJsonSerializable)model).ToBinaryData(options); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -199,7 +199,7 @@ public class JsonInterfaceSequenceWriterNonGenericStrategy : RoundTripStrateg public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); + return ((IModelJsonSerializable)model).ToBinaryData(options); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -215,7 +215,7 @@ public class JsonInterfaceUtf8ReaderNonGenericStrategy : RoundTripStrategy public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); + return ((IModelJsonSerializable)model).ToBinaryData(options); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs index 289be07b7ce7..a3a9253673e3 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs @@ -101,9 +101,6 @@ ApiProfile IModelSerializable.Deserialize(BinaryData data, ModelSeri return DeserializeApiProfile(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs index f4089ed802e8..30943890e730 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs @@ -394,9 +394,6 @@ private static void SetProperty(ReadOnlySpan propertyName, ref Availabilit reader.Skip(); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs index 2571b0863a5f..daf785d6e346 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs @@ -123,9 +123,6 @@ ComputeSku IModelSerializable.Deserialize(BinaryData data, ModelSeri return DeserializeComputeSku(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs index 6c48561ff5e1..ed0e3af9222a 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs @@ -171,9 +171,6 @@ InstanceViewStatus IModelSerializable.Deserialize(BinaryData return DeserializeInstanceViewStatus(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs index 166d5da1903f..1b5eebfb0869 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs @@ -137,9 +137,6 @@ ProviderExtendedLocation IModelSerializable.Deserializ return DeserializeProviderExtendedLocation(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs index 9584cf4cf7d9..ed659ae327c1 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs @@ -360,9 +360,6 @@ ProviderResourceType IModelSerializable.Deserialize(Binary return DeserializeProviderResourceType(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs index 02ce68e0dc62..c682f2c20ac2 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs @@ -211,9 +211,6 @@ private static void SetProperty(ReadOnlySpan propertyName, ref ResourcePro reader.Skip(); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs index 535ea1fb198a..10d744b1c00b 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs @@ -209,9 +209,6 @@ ResourceTypeAlias IModelSerializable.Deserialize(BinaryData d return DeserializeResourceTypeAlias(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs index 78d40274d119..05d28099485e 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs @@ -161,9 +161,6 @@ ResourceTypeAliasPath IModelSerializable.Deserialize(Bina return DeserializeResourceTypeAliasPath(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs index 76229f2dbc61..80d0a46c37ae 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs @@ -109,9 +109,6 @@ ResourceTypeAliasPathMetadata IModelSerializable. return DeserializeResourceTypeAliasPathMetadata(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs index d17f02e795d0..51cf3cfaa49a 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs @@ -122,9 +122,6 @@ ResourceTypeAliasPattern IModelSerializable.Deserializ return DeserializeResourceTypeAliasPattern(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs index 0c508adb8568..5e5319a65bc2 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs @@ -184,9 +184,6 @@ public override SystemData Read(ref Utf8JsonReader reader, Type typeToConvert, J } } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs index d29858820aa5..54bdff989f59 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs @@ -109,9 +109,6 @@ public override WritableSubResource Read(ref Utf8JsonReader reader, Type typeToC } } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs index 053ee1b6cc12..cc86af56037e 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs @@ -119,9 +119,6 @@ ZoneMapping IModelSerializable.Deserialize(BinaryData data, ModelSe return DeserializeZoneMapping(doc.RootElement, options); } - BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) - { - return ModelSerializerHelper.SerializeToBinaryData((writer) => { Serialize(writer, options); }); - } + BinaryData IModelSerializable.Serialize(ModelSerializerOptions options) => this.ToBinaryData(options); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/XmlModelForCombinedInterfaceTests.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/XmlModelForCombinedInterfaceTests.cs new file mode 100644 index 000000000000..1022f4c9a6fb --- /dev/null +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/XmlModelForCombinedInterfaceTests.cs @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Azure.Core.Serialization; +using Azure.Core.Tests.Public.ModelSerializationTests.Models; +using NUnit.Framework; + +namespace Azure.Core.Tests.Public.ModelSerializationTests +{ + internal class XmlModelForCombinedInterfaceTests : ModelTests + { + protected override string JsonPayload => "{\"key\":\"Color\",\"value\":\"Red\",\"readOnlyProperty\":\"ReadOnly\"}"; + + protected override string WirePayload => "" + + "Color" + + "Red" + + "ReadOnly" + + ""; + + protected override Func ToRequestContent => model => model; + + protected override Func FromResponse => response => (XmlModelForCombinedInterface)response; + + protected override string GetExpectedResult(ModelSerializerFormat format) + { + if (format == ModelSerializerFormat.Wire) + { + var expectedSerializedString = "\uFEFFColorRed"; + if (format.Equals(ModelSerializerFormat.Json)) + expectedSerializedString += "ReadOnly"; + expectedSerializedString += ""; + return expectedSerializedString; + } + if (format == ModelSerializerFormat.Json) + { + var expectedSerializedString = "{\"key\":\"Color\",\"value\":\"Red\""; + if (format.Equals(ModelSerializerFormat.Json)) + expectedSerializedString += ",\"readOnlyProperty\":\"ReadOnly\""; + expectedSerializedString += "}"; + return expectedSerializedString; + } + throw new InvalidOperationException($"Unknown format used in test {format}"); + } + + protected override void VerifyModel(XmlModelForCombinedInterface model, ModelSerializerFormat format) + { + Assert.AreEqual("Color", model.Key); + Assert.AreEqual("Red", model.Value); + if (format.Equals(ModelSerializerFormat.Json)) + Assert.AreEqual("ReadOnly", model.ReadOnlyProperty); + } + + protected override void CompareModels(XmlModelForCombinedInterface model, XmlModelForCombinedInterface model2, ModelSerializerFormat format) + { + Assert.AreEqual(model.Key, model2.Key); + Assert.AreEqual(model.Value, model2.Value); + if (format.Equals(ModelSerializerFormat.Json)) + Assert.AreEqual(model.ReadOnlyProperty, model2.ReadOnlyProperty); + } + } +}